AuthController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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([
  25. ...$result["payload"],
  26. "refresh_token" => $result["refreshToken"],
  27. ]),
  28. message: __("auth.logged_in"),
  29. );
  30. }
  31. public function logout(): JsonResponse
  32. {
  33. $this->authService->logout();
  34. return $this->successResponse(
  35. message: __("auth.logout"),
  36. )->withoutCookie("refresh_token");
  37. }
  38. public function refresh(RefreshTokenRequest $request): JsonResponse
  39. {
  40. $refresh_token = $request->validated("refresh_token");
  41. if (is_null($refresh_token)) {
  42. return $this->errorResponse(code: 403);
  43. }
  44. $result = $this->authService->refresh(
  45. $refresh_token
  46. );
  47. if (is_null($result)) {
  48. return $this->errorResponse(
  49. message: __("auth.unauthorized"),
  50. code: 403,
  51. );
  52. }
  53. return $this->successResponse(
  54. payload: new AuthResource([
  55. ...$result["payload"],
  56. "refresh_token" => $result["refreshToken"],
  57. ]),
  58. );
  59. }
  60. public function sendCode(UserAppsRequest $request): JsonResponse
  61. {
  62. $this->authService->sendCode($request->validated());
  63. return $this->successResponse(
  64. message: __("messages.code_sent"),
  65. code: 201,
  66. );
  67. }
  68. public function validateCode(UserAppsValidateCodeRequest $request): JsonResponse
  69. {
  70. try {
  71. $email = $request->input("email");
  72. $phone = $request->input("phone");
  73. $code = $request->input("code");
  74. $result = $this->authService->validateCode($request->validated());
  75. if (!$result) {
  76. return $this->errorResponse(
  77. message: __("auth.invalid_code"),
  78. code: 400,
  79. );
  80. }
  81. return $this->successResponse(
  82. payload: ['email' => $email, 'phone' => $phone, 'code' => $code],
  83. message: __("auth.valid_code"),
  84. code: 200,
  85. );
  86. } catch (\Exception $e) {
  87. return $this->errorResponse(
  88. message: __("auth.validation_error"),
  89. code: 500,
  90. );
  91. }
  92. }
  93. }