rinvex/cortex-foundation

View on GitHub
bootstrap/module.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

declare(strict_types=1);

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Middleware\FrameGuard;
use Illuminate\Http\Middleware\HandleCors;
use Cortex\Foundation\Http\Middleware\TrimWww;
use Illuminate\Http\Middleware\SetCacheHeaders;
use Illuminate\Session\Middleware\StartSession;
use Cortex\Foundation\Http\Middleware\Clockwork;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Cortex\Foundation\Http\Middleware\TrustHosts;
use Cortex\Foundation\Http\Middleware\TrimStrings;
use Cortex\Foundation\Http\Middleware\TrustProxies;
use Illuminate\Routing\Middleware\ThrottleRequests;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Routing\Middleware\ValidateSignature;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Cortex\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use Cortex\Foundation\Http\Middleware\SetNoCacheHeaders;
use Cortex\Foundation\Http\Middleware\EnforceTrailingSlash;
use Cortex\Foundation\Http\Middleware\LocalizationRedirect;
use Illuminate\Foundation\Http\Middleware\ValidatePostSize;
use Cortex\Foundation\Http\Middleware\UnbindRouteParameters;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Cortex\Foundation\Http\Middleware\NotificationMiddleware;
use Cortex\Foundation\Http\Middleware\SetSessionConfigRuntime;
use Cortex\Foundation\Http\Middleware\DiscoverNavigationRoutes;
use Cortex\Foundation\Http\Middleware\SetCrawlingRobotsHeaders;
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
use Cortex\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;

return function () {
    // Bind route models and constrains
    Route::pattern('locale', '[a-z]{2}');
    Route::pattern('media', '[a-zA-Z0-9-_]+');
    Route::pattern('accessarea', '[a-zA-Z0-9-_]+');
    Route::model('media', config('media-library.media_model'));
    Route::model('accessarea', config('cortex.foundation.models.accessarea'));

    Route::pattern('absentarea', '^([a-zA-Z0-9\-\.]+)$');
    Route::pattern('centralarea', route_pattern());
    Route::pattern('frontarea', route_pattern('frontarea'));
    Route::pattern('adminarea', route_pattern('adminarea'));

    // prepend middleware to the 'web' middleware group
    Route::prependMiddlewareToGroup('web', SetSessionConfigRuntime::class);

    // Map relations
    Relation::morphMap([
        'media' => config('media-library.media_model'),
        'accessarea' => config('cortex.foundation.models.accessarea'),
        'activity_model' => config('activitylog.activity_model'),
    ]);

    // Update the priority-sorted list of middleware. This forces non-global middleware to always be in the GIVEN ORDER.
    $this->app[Kernel::class]->appendToMiddlewarePriority(DiscoverNavigationRoutes::class);

    // Push middleware to the application's global HTTP middleware stack. These middleware are executed in every request in the GIVEN ORDER.
    $this->app[Kernel::class]->pushMiddleware(TrustHosts::class);
    $this->app[Kernel::class]->pushMiddleware(TrustProxies::class);
    $this->app[Kernel::class]->pushMiddleware(HandleCors::class);
    $this->app[Kernel::class]->pushMiddleware(PreventRequestsDuringMaintenance::class);
    $this->app[Kernel::class]->pushMiddleware(TrimWww::class);
    $this->app[Kernel::class]->pushMiddleware(EnforceTrailingSlash::class);
    $this->app[Kernel::class]->pushMiddleware(ValidatePostSize::class);
    $this->app[Kernel::class]->pushMiddleware(TrimStrings::class);
    $this->app[Kernel::class]->pushMiddleware(ConvertEmptyStringsToNull::class);
    $this->app[Kernel::class]->pushMiddleware(SetCrawlingRobotsHeaders::class);

    // Register application's route middleware.
    Route::aliasMiddleware('signed', ValidateSignature::class);
    Route::aliasMiddleware('throttle', ThrottleRequests::class);
    Route::aliasMiddleware('bindings', SubstituteBindings::class);
    Route::aliasMiddleware('cache.headers', SetCacheHeaders::class);
    Route::aliasMiddleware('nohttpcache', SetNoCacheHeaders::class);

    // Push middleware to route group. These middleware are executed in every request in the GIVEN ORDER.
    Route::pushMiddlewareToGroup('web', EncryptCookies::class);
    Route::pushMiddlewareToGroup('web', AddQueuedCookiesToResponse::class);
    Route::pushMiddlewareToGroup('web', StartSession::class);
    Route::pushMiddlewareToGroup('web', FrameGuard::class);
    Route::pushMiddlewareToGroup('web', LocalizationRedirect::class);
    Route::pushMiddlewareToGroup('web', ShareErrorsFromSession::class);
    Route::pushMiddlewareToGroup('web', VerifyCsrfToken::class);
    Route::pushMiddlewareToGroup('web', SubstituteBindings::class);
    Route::pushMiddlewareToGroup('web', NotificationMiddleware::class);
    Route::pushMiddlewareToGroup('web', DiscoverNavigationRoutes::class);
    Route::pushMiddlewareToGroup('web', UnbindRouteParameters::class);
    $this->app->environment('production') || Route::pushMiddlewareToGroup('web', Clockwork::class);
};