AuthController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. if (isset($result["error"]) && $result["error"] === "first_access_required") {
  30. return $this->errorResponse(message: __("auth.first_access_required"), code: 403);
  31. }
  32. if (isset($result["error"]) && $result["error"] === "inactive") {
  33. return $this->errorResponse(message: __("auth.inactive"), code: 403);
  34. }
  35. $cookieName = $this->getCookieName($request);
  36. return $this->successResponse(
  37. payload: new AuthResource($result["payload"]),
  38. message: __("auth.logged_in"),
  39. )->withCookie(
  40. cookie(
  41. $cookieName,
  42. $result["refreshToken"],
  43. config("sanctum.rt_expiration") * 60,
  44. "/",
  45. config("session.domain"),
  46. config("session.secure"),
  47. true,
  48. false,
  49. "Lax",
  50. ),
  51. );
  52. }
  53. public function logout(Request $request): JsonResponse
  54. {
  55. $this->authService->logout();
  56. $cookieName = $this->getCookieName($request);
  57. return $this->successResponse(
  58. message: __("auth.logout"),
  59. )->withoutCookie($cookieName);
  60. }
  61. public function refresh(RefreshTokenRequest $request): JsonResponse
  62. {
  63. $cookieName = $this->getCookieName($request);
  64. $refresh_token = $request->cookie($cookieName);
  65. if (is_null($refresh_token)) {
  66. return $this->errorResponse(
  67. code: 403,
  68. )->withoutCookie($cookieName);
  69. }
  70. $result = $this->authService->refresh(
  71. $refresh_token
  72. );
  73. if (is_null($result)) {
  74. return $this->errorResponse(
  75. message: __("auth.unauthorized"),
  76. code: 403,
  77. )->withoutCookie($cookieName);
  78. }
  79. return $this->successResponse(
  80. payload: new AuthResource($result["payload"]),
  81. )->withCookie(
  82. cookie(
  83. $cookieName,
  84. $result["refreshToken"],
  85. config("sanctum.rt_expiration") * 60,
  86. "/",
  87. config("session.domain"),
  88. config("session.secure"),
  89. true,
  90. true,
  91. "Lax",
  92. ),
  93. );
  94. }
  95. }