AuthController.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\AuthRequest;
  4. use App\Http\Requests\RefreshTokenRequest;
  5. use App\Http\Requests\UserAppsRequest;
  6. use App\Http\Requests\UserAppsValidateCodeRequest;
  7. use Illuminate\Http\JsonResponse;
  8. use App\Http\Resources\AuthResource;
  9. use App\Services\AuthService;
  10. class AuthController extends Controller
  11. {
  12. public function __construct(protected AuthService $authService) {}
  13. public function login(AuthRequest $request): JsonResponse
  14. {
  15. $validated = $request->validated();
  16. $result = $this->authService->login(
  17. email: $validated["email"],
  18. password: $validated["password"],
  19. );
  20. if (!$result) {
  21. return $this->errorResponse(message: __("auth.failed"), code: 401);
  22. }
  23. return $this->successResponse(
  24. payload: new AuthResource($result["payload"]),
  25. message: __("auth.logged_in"),
  26. )->withCookie(
  27. cookie(
  28. "refresh_token",
  29. $result["refreshToken"],
  30. config("sanctum.rt_expiration") * 60,
  31. "/",
  32. config("session.domain"),
  33. config("session.secure"),
  34. true,
  35. false,
  36. "Lax",
  37. ),
  38. );
  39. }
  40. public function logout(): JsonResponse
  41. {
  42. $this->authService->logout();
  43. return $this->successResponse(
  44. message: __("auth.logout"),
  45. )->withoutCookie("refresh_token");
  46. }
  47. public function refresh(RefreshTokenRequest $request): JsonResponse
  48. {
  49. $refresh_token = $request->cookie("refresh_token");
  50. if (is_null($refresh_token)) {
  51. return $this->errorResponse(
  52. code: 403,
  53. )->withoutCookie("refresh_token");
  54. }
  55. $result = $this->authService->refresh(
  56. $refresh_token
  57. );
  58. if (is_null($result)) {
  59. return $this->errorResponse(
  60. message: __("auth.unauthorized"),
  61. code: 403,
  62. )->withoutCookie("refresh_token");
  63. }
  64. return $this->successResponse(
  65. payload: new AuthResource($result["payload"]),
  66. )->withCookie(
  67. cookie(
  68. "refresh_token",
  69. $result["refreshToken"],
  70. config("sanctum.rt_expiration") * 60,
  71. "/",
  72. config("session.domain"),
  73. config("session.secure"),
  74. true,
  75. true,
  76. "Lax",
  77. ),
  78. );
  79. }
  80. public function sendCode(UserAppsRequest $request): JsonResponse
  81. {
  82. $this->authService->sendCode($request->validated());
  83. return $this->successResponse(
  84. message: __("messages.code_sent"),
  85. code: 201,
  86. );
  87. }
  88. public function validateCode(UserAppsValidateCodeRequest $request): JsonResponse
  89. {
  90. try {
  91. $email = $request->input("email");
  92. $phone = $request->input("phone");
  93. $code = $request->input("code");
  94. $result = $this->authService->validateCode($request->validated());
  95. if (!$result) {
  96. return $this->errorResponse(
  97. message: __("auth.invalid_code"),
  98. code: 400,
  99. );
  100. }
  101. return $this->successResponse(
  102. payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
  103. message: __("auth.valid_code"),
  104. code: 200,
  105. );
  106. } catch (\Exception $e) {
  107. return $this->errorResponse(
  108. message: __("auth.validation_error"),
  109. code: 500,
  110. );
  111. }
  112. }
  113. }