diff --git a/backend/app/Controllers/AuthController.php b/backend/app/Controllers/AuthController.php index 2ab46c8..0794f10 100644 --- a/backend/app/Controllers/AuthController.php +++ b/backend/app/Controllers/AuthController.php @@ -10,9 +10,11 @@ use App\Exceptions\BadRequestException; use App\Exceptions\UnauthorizedException; use App\Middleware\AuthMiddleware; use App\User\User; +use DomainException; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Slim\Psr7\Response; +use Throwable; class AuthController { @@ -36,24 +38,13 @@ class AuthController password: $body['password'] ?? null, ), ); - } catch (BadRequestException $exception) { - return $this->jsonResponse( - new Response(400), - ['error' => $exception->getMessage()], - 400, - ); - } catch (UnauthorizedException $exception) { - return $this->jsonResponse( - new Response(401), - ['error' => $exception->getMessage()], - 401, - ); + } catch (Throwable $exception) { + return $this->errorResponse($exception); } $session = $this->createSession->execute($user); $response = $this->jsonResponse( - new Response(200), ['user' => $this->buildUserPayload($user)], 200, ); @@ -98,14 +89,12 @@ class AuthController if (! $user instanceof User) { return $this->jsonResponse( - new Response(401), ['error' => 'unauthenticated'], 401, ); } return $this->jsonResponse( - new Response(200), ['user' => $this->buildUserPayload($user)], 200, ); @@ -120,16 +109,38 @@ class AuthController } private function jsonResponse( - ResponseInterface $response, array $data, int $status, ): ResponseInterface { - $response = $response->withStatus($status); + $response = new Response($status); $response->getBody()->write(json_encode($data)); return $response->withHeader('Content-Type', 'application/json'); } + private function errorResponse(Throwable $exception): ResponseInterface + { + if ($exception instanceof BadRequestException) { + return $this->jsonResponse( + ['error' => $exception->getMessage()], + 400, + ); + } + if ($exception instanceof UnauthorizedException) { + return $this->jsonResponse( + ['error' => $exception->getMessage()], + 401, + ); + } + if ($exception instanceof DomainException) { + return $this->jsonResponse( + ['error' => $exception->getMessage()], + 409, + ); + } + throw $exception; + } + private function parseBody(ServerRequestInterface $request): array { $contentType = $request->getHeaderLine('Content-Type');