WebAuthnDeviceLostController.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Extensions\WebauthnCredentialBroker;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Requests\WebauthnDeviceLostRequest;
  6. use Illuminate\Foundation\Auth\ResetsPasswords;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Password;
  9. use Illuminate\Validation\ValidationException;
  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. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
  19. *
  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. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  36. *
  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. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  54. */
  55. protected function sendRecoveryLinkResponse(Request $request, string $response)
  56. {
  57. return response()->json(['message' => __('auth.webauthn.account_recovery_email_sent')]);
  58. }
  59. }