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'); + } +}