<?php namespace Lewisdale\App\Session; use Lewisdale\App\Models\Repositories\UserRepository; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; use Slim\Psr7\Response; class LoginMiddleware implements MiddlewareInterface { function __construct( private readonly UserRepository $users, ) {} private function redirectToLogin(): ResponseInterface { $response = new Response(302); return $response->withHeader('Location', '/account/login'); } public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if (!isset($_SESSION['user'])) { return $this->redirectToLogin(); } $user = $this->users->find($_SESSION['user']); if (!$user) { return $this->redirectToLogin(); } return $handler->handle($request->withAttribute('user', $user)); } }