AuthController.php 2.9 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 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. email: $validated["email"],
  17. password: $validated["password"],
  18. origem: $validated["origem"]
  19. );
  20. if (!$result) {
  21. return $this->errorResponse(message: __("auth.failed"), code: 401);
  22. }
  23. $cookieName = $this->getCookieName($request);
  24. return $this->successResponse(
  25. payload: new AuthResource($result["payload"]),
  26. message: __("auth.logged_in"),
  27. )->withCookie(
  28. cookie(
  29. $cookieName,
  30. $result["refreshToken"],
  31. config("sanctum.rt_expiration") * 60,
  32. "/",
  33. config("session.domain"),
  34. config("session.secure"),
  35. true,
  36. false,
  37. "Lax",
  38. ),
  39. );
  40. }
  41. public function logout(Request $request): JsonResponse
  42. {
  43. $this->authService->logout();
  44. $cookieName = $this->getCookieName($request);
  45. return $this->successResponse(
  46. message: __("auth.logout"),
  47. )->withoutCookie($cookieName);
  48. }
  49. public function refresh(RefreshTokenRequest $request): JsonResponse
  50. {
  51. $cookieName = $this->getCookieName($request);
  52. $refresh_token = $request->cookie($cookieName);
  53. if (is_null($refresh_token)) {
  54. return $this->errorResponse(
  55. code: 403,
  56. )->withoutCookie($cookieName);
  57. }
  58. $result = $this->authService->refresh(
  59. $refresh_token
  60. );
  61. if (is_null($result)) {
  62. return $this->errorResponse(
  63. message: __("auth.unauthorized"),
  64. code: 403,
  65. )->withoutCookie($cookieName);
  66. }
  67. return $this->successResponse(
  68. payload: new AuthResource($result["payload"]),
  69. )->withCookie(
  70. cookie(
  71. $cookieName,
  72. $result["refreshToken"],
  73. config("sanctum.rt_expiration") * 60,
  74. "/",
  75. config("session.domain"),
  76. config("session.secure"),
  77. true,
  78. true,
  79. "Lax",
  80. ),
  81. );
  82. }
  83. /**
  84. * Resolves the dynamic cookie name based on the requesting application.
  85. */
  86. private function getCookieName(mixed $request): string
  87. {
  88. $appOrigin = $request->header("X-App-Origin", "default");
  89. return "{$appOrigin}_refresh_token";
  90. }
  91. }