From b581e80413b89c0fc13311a2cc26b1de498feec2 Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Sat, 16 May 2026 21:32:27 +0300 Subject: [PATCH] implement auth middleware Green phase: PSR-15 AuthMiddleware checks auth_token cookie, looks up session, validates expiry, sets user attribute on request or returns 401. --- backend/app/Middleware/AuthMiddleware.php | 59 +++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 backend/app/Middleware/AuthMiddleware.php diff --git a/backend/app/Middleware/AuthMiddleware.php b/backend/app/Middleware/AuthMiddleware.php new file mode 100644 index 0000000..246f810 --- /dev/null +++ b/backend/app/Middleware/AuthMiddleware.php @@ -0,0 +1,59 @@ +getCookieParams(); + $token = $cookies[self::COOKIE_NAME] ?? null; + + if (! is_string($token) || $token === '') { + return $this->unauthorized(); + } + + $session = $this->sessionRepo->findByToken($token); + + if ($session === null) { + return $this->unauthorized(); + } + + if ($session->isExpired($this->clock->now())) { + $this->sessionRepo->deleteByToken($token); + + return $this->unauthorized(); + } + + $request = $request->withAttribute('user', $session->getUser()); + + return $handler->handle($request); + } + + private function unauthorized(): ResponseInterface + { + $response = new Response(401); + $response->getBody()->write( + json_encode(['error' => 'unauthenticated']), + ); + + return $response->withHeader('Content-Type', 'application/json'); + } +}