WebAuthnDeviceLostController.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Validation\ValidationException;
  6. use App\Extensions\WebauthnCredentialBroker;
  7. use Illuminate\Foundation\Auth\ResetsPasswords;
  8. use Illuminate\Support\Facades\Password;
  9. use App\Http\Requests\WebauthnDeviceLostRequest;
  10. class WebAuthnDeviceLostController extends Controller
  11. {
  12. use ResetsPasswords;
  13. /**
  14. * Send a recovery email to the user.
  15. *
  16. * @param \App\Http\Requests\WebauthnDeviceLostRequest $request
  17. * @param \App\Extensions\WebauthnCredentialBroker $broker
  18. *
  19. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
  20. * @throws \Illuminate\Validation\ValidationException
  21. */
  22. public function sendRecoveryEmail(WebauthnDeviceLostRequest $request, WebauthnCredentialBroker $broker)
  23. {
  24. $credentials = $request->validated();
  25. $response = $broker->sendResetLink($credentials);
  26. return $response === Password::RESET_LINK_SENT
  27. ? $this->sendRecoveryLinkResponse($request, $response)
  28. : $this->sendRecoveryLinkFailedResponse($request, $response);
  29. }
  30. /**
  31. * Get the response for a failed account recovery link.
  32. *
  33. * @param \Illuminate\Http\Request $request
  34. * @param string $response
  35. *
  36. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  37. * @throws \Illuminate\Validation\ValidationException
  38. */
  39. protected function sendRecoveryLinkFailedResponse(Request $request, string $response)
  40. {
  41. if ($request->wantsJson()) {
  42. throw ValidationException::withMessages(['email' => [trans($response)]]);
  43. }
  44. return back()
  45. ->withInput($request->only('email'))
  46. ->withErrors(['email' => trans($response)]);
  47. }
  48. /**
  49. * Get the response for a successful account recovery link.
  50. *
  51. * @param \Illuminate\Http\Request $request
  52. * @param string $response
  53. *
  54. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  55. */
  56. protected function sendRecoveryLinkResponse(Request $request, string $response)
  57. {
  58. return response()->json(['message' => __('auth.webauthn.account_recovery_email_sent')]);
  59. }
  60. }