Paillasse/portail/bootstrap/app.php

42 lines
1.9 KiB
PHP
Raw Normal View History

<?php
use App\Http\Middleware\MetAJourActivite;
use App\Http\Middleware\PolitiqueSecuriteContenu;
use App\Http\Middleware\VerifieSessionUnique;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Request;
use Laravel\Sanctum\Http\Middleware\CheckAbilities;
use Laravel\Sanctum\Http\Middleware\CheckForAnyAbility;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware): void {
$middleware->alias([
'session.unique' => VerifieSessionUnique::class,
'maj.activite' => MetAJourActivite::class,
'abilities' => CheckAbilities::class,
'ability' => CheckForAnyAbility::class,
]);
$middleware->web(append: [PolitiqueSecuriteContenu::class]);
// Postées directement par un navigateur ou par Moodle, jamais avec
// notre jeton CSRF : "->withoutMiddleware(ValidateCsrfToken::class)"
// sur la route elle-même ne suffit pas (constaté le 2026-10-14 en
// vérifiant /lti/lancement en réel : 419 malgré cet appel sur la
// route — /csp-rapport avait exactement le même défaut, jamais vu
// faute de surveillance de ses échecs). C'est cette exception
// globale, pas celle sur la route, qui fonctionne réellement.
$middleware->validateCsrfTokens(except: ['csp-rapport', 'lti/connexion', 'lti/lancement/*']);
})
->withExceptions(function (Exceptions $exceptions): void {
$exceptions->shouldRenderJsonWhen(
fn (Request $request) => $request->is('api/*') || $request->expectsJson(),
);
})->create();