AuthController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\AuthRequest;
  4. use App\Http\Requests\RefreshTokenRequest;
  5. use Illuminate\Http\JsonResponse;
  6. use App\Http\Resources\AuthResource;
  7. use App\Services\AuthService;
  8. use Illuminate\Http\Request;
  9. class AuthController extends Controller
  10. {
  11. public function __construct(protected AuthService $authService) {}
  12. public function login(AuthRequest $request): JsonResponse
  13. {
  14. $validated = $request->validated();
  15. $result = $this->authService->login(
  16. identifier: $validated["identifier"],
  17. password: $validated["password"],
  18. tipo: $validated["tipo"],
  19. );
  20. if (!$result) {
  21. return $this->errorResponse(message: __("auth.failed"), code: 401);
  22. }
  23. if (isset($result["error"]) && $result["error"] === "wrong_type") {
  24. return $this->errorResponse(message: __("auth.wrong_type"), code: 403);
  25. }
  26. if (isset($result["error"]) && $result["error"] === "refused") {
  27. return $this->errorResponse(message: __("auth.refused"), code: 403);
  28. }
  29. $cookieName = $this->getCookieName($request);
  30. return $this->successResponse(
  31. payload: new AuthResource($result["payload"]),
  32. message: __("auth.logged_in"),
  33. )->withCookie(
  34. cookie(
  35. $cookieName,
  36. $result["refreshToken"],
  37. config("sanctum.rt_expiration") * 60,
  38. "/",
  39. config("session.domain"),
  40. config("session.secure"),
  41. true,
  42. false,
  43. "Lax",
  44. ),
  45. );
  46. }
  47. public function logout(Request $request): JsonResponse
  48. {
  49. $this->authService->logout();
  50. $cookieName = $this->getCookieName($request);
  51. return $this->successResponse(
  52. message: __("auth.logout"),
  53. )->withoutCookie($cookieName);
  54. }
  55. public function refresh(RefreshTokenRequest $request): JsonResponse
  56. {
  57. $cookieName = $this->getCookieName($request);
  58. $refresh_token = $request->cookie($cookieName);
  59. if (is_null($refresh_token)) {
  60. return $this->errorResponse(
  61. code: 403,
  62. )->withoutCookie($cookieName);
  63. }
  64. $result = $this->authService->refresh(
  65. $refresh_token
  66. );
  67. if (is_null($result)) {
  68. return $this->errorResponse(
  69. message: __("auth.unauthorized"),
  70. code: 403,
  71. )->withoutCookie($cookieName);
  72. }
  73. return $this->successResponse(
  74. payload: new AuthResource($result["payload"]),
  75. )->withCookie(
  76. cookie(
  77. $cookieName,
  78. $result["refreshToken"],
  79. config("sanctum.rt_expiration") * 60,
  80. "/",
  81. config("session.domain"),
  82. config("session.secure"),
  83. true,
  84. true,
  85. "Lax",
  86. ),
  87. );
  88. }
  89. }