62 lines
2.4 KiB
PHP
62 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Core\EnvironmentLoader;
|
|
use App\Enums\Environment;
|
|
use App\Http\Middleware\CspMiddleware;
|
|
use App\Http\Middleware\HstsMiddleware;
|
|
use App\Http\Middleware\StartSessionMiddleware;
|
|
use App\Http\Routes;
|
|
use App\Security\Csp\CspPolicy;
|
|
use App\Security\Csp\Directives\DefaultSrc;
|
|
use App\Security\Csp\Directives\ImgSrc;
|
|
use App\Security\Csp\Directives\ScriptSrc;
|
|
use App\Security\Csp\Directives\StyleSrc;
|
|
use App\Security\Hst\Config as HstConfig;
|
|
use Laminas\Diactoros\ServerRequest;
|
|
use Laminas\Diactoros\ServerRequestFactory;
|
|
use League\Plates\Engine;
|
|
use League\Route\Router;
|
|
use League\Route\Strategy\ApplicationStrategy;
|
|
use Psr\Container\ContainerInterface;
|
|
|
|
return [
|
|
Environment::class => static fn (): Environment => Environment::from($_ENV['ENVIRONMENT']),
|
|
ServerRequest::class => static fn (): ServerRequest => ServerRequestFactory::fromGlobals($_SERVER, $_GET, $_POST, $_COOKIE, $_FILES),
|
|
Engine::class => static fn (): Engine => new Engine(dirname(__DIR__).'/resources/views'),
|
|
EnvironmentLoader::class => static fn () => new EnvironmentLoader(dirname(__DIR__)),
|
|
'middlewares' => static fn () => [
|
|
StartSessionMiddleware::class,
|
|
CspMiddleware::class,
|
|
HstsMiddleware::class,
|
|
],
|
|
Router::class => static function (ContainerInterface $container): Router {
|
|
$strategy = new ApplicationStrategy();
|
|
$strategy->setContainer($container);
|
|
|
|
$router = new Router();
|
|
$router->setStrategy($strategy);
|
|
|
|
$router->lazyMiddlewares($container->get('middlewares'));
|
|
|
|
Routes::routes($router);
|
|
|
|
return $router;
|
|
},
|
|
CspPolicy::class => static fn (ContainerInterface $container): CspPolicy => (new CspPolicy())
|
|
->addDirective($container->get(DefaultSrc::class))
|
|
->addDirective($container->get(ImgSrc::class))
|
|
->addDirective($container->get(ScriptSrc::class))
|
|
->addDirective($container->get(StyleSrc::class)),
|
|
DefaultSrc::class => static fn (): DefaultSrc => (new DefaultSrc())->addSource("'self'"),
|
|
ImgSrc::class => static fn (): ImgSrc => (new ImgSrc())->addSource("'self'"),
|
|
ScriptSrc::class => static fn (): ScriptSrc => (new ScriptSrc())->addSource("'self'"),
|
|
StyleSrc::class => static fn (): StyleSrc => (new StyleSrc())->addSource("'self'"),
|
|
HstConfig::class => static fn (): HstConfig => new HstConfig(
|
|
maxAge: 31536000,
|
|
includeSubdomains: true,
|
|
preload: true
|
|
),
|
|
];
|