ldc-boutique-cnc-sable/bootstrap/middlewares.php

103 lines
3.3 KiB
PHP

<?php
declare(strict_types=1);
use App\Http\Middleware\CustomerIsEmployed;
use App\Http\Middleware\EnsureCustomerEmailIsVerified;
use App\Http\Middleware\HtmlSanitizer;
use App\Http\Middleware\SecureHeaders;
use App\Http\Middleware\UserHasRole;
use App\Providers\RouteServiceProvider;
use App\Services\FlashMessageService;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Foundation\Http\Middleware\PreventRequestForgery;
use Illuminate\Http\Request;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
$redirectGuests = function (Request $request) {
$logins = [
'backend' => route('bo.auth.login'),
'frontend' => route('fo.auth.connexion'),
];
app(FlashMessageService::class)->warning(__('Please log in to continue.'));
foreach ($request->route()->gatherMiddleware() as $middleware) {
if (\is_string($middleware) && str_contains($middleware, 'auth:')) {
$route = $logins[str_replace('auth:', '', $middleware)] ?? null;
if ($route) {
return $route;
}
}
}
return $logins['frontend'];
};
$redirectUsers = function (Request $request) {
$logins = [
'backend' => route('bo.dashboard'),
'frontend' => route('fo.pages.home'),
];
foreach ($request->route()->gatherMiddleware() as $middleware) {
if (\is_string($middleware) && str_contains($middleware, 'auth:')) {
$route = $logins[str_replace('auth:', '', $middleware)] ?? null;
if ($route) {
return $route;
}
}
}
return $logins['frontend'];
};
return function (Middleware $middleware) use ($redirectGuests, $redirectUsers): void {
$middleware->trustProxies(at: '*');
$middleware->redirectGuestsTo($redirectGuests);
$middleware->redirectUsersTo($redirectUsers);
$middleware->alias([
'has-role' => UserHasRole::class,
'is-employed' => CustomerIsEmployed::class,
'verified' => EnsureCustomerEmailIsVerified::class,
'htmlsanitize' => HtmlSanitizer::class,
]);
$middleware->group(
RouteServiceProvider::ROUTE_GROUP_API,
[
SubstituteBindings::class,
]
);
$middleware->group(
RouteServiceProvider::ROUTE_GROUP_WEB_AJAX,
[
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
PreventRequestForgery::class,
SubstituteBindings::class,
SecureHeaders::class,
]
);
$middleware->group(
RouteServiceProvider::ROUTE_GROUP_WEB,
[
HtmlSanitizer::class,
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
PreventRequestForgery::class,
SubstituteBindings::class,
SecureHeaders::class,
]
);
};