add auth and csrf-twig middleware

This commit is contained in:
Yisroel Baum 2025-10-31 12:10:00 +02:00
parent da3eeef750
commit 3f21ddeab1
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
2 changed files with 55 additions and 0 deletions

View file

@ -0,0 +1,27 @@
<?php
namespace FreightQuote\MiddleWare;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface as Handler;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Psr7\Response as SlimResponse;
class AuthMiddleware implements MiddlewareInterface
{
public function process(Request $request, Handler $handler): Response
{
if (isset($_SESSION['user_id'])) {
return $handler->handle($request);
}
$uri = $request->getUri()->getPath();
if ($uri !== '/login' && $uri !== '/logout') {
$_SESSION['intended'] = $uri;
}
$resp = new SlimResponse(302);
return $resp->withHeader('Location', '/login');
}
}

View file

@ -0,0 +1,28 @@
<?php
namespace FreightQuote\MiddleWare;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Server\RequestHandlerInterface as Handler;
use Psr\Http\Server\MiddlewareInterface;
use Slim\Views\Twig;
class CsrfToTwigMiddleware implements MiddlewareInterface
{
public function __construct(private Twig $twig) {}
public function process(Request $request, Handler $handler): Response
{
// These will be null on some requests (like first GET), so we guard it
$nameKey = $request->getAttribute('csrf_name');
$valueKey = $request->getAttribute('csrf_value');
$this->twig->getEnvironment()->addGlobal('csrf', [
'name' => $nameKey,
'value' => $valueKey,
]);
return $handler->handle($request);
}
}