X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/1af5bbf3f7404ef9380477657ac1b5df0df119aa..refs/pull/5676/head:/app/Exceptions/StoppedAuthenticationException.php diff --git a/app/Exceptions/StoppedAuthenticationException.php b/app/Exceptions/StoppedAuthenticationException.php index de8898df7..8a917bc52 100644 --- a/app/Exceptions/StoppedAuthenticationException.php +++ b/app/Exceptions/StoppedAuthenticationException.php @@ -2,39 +2,57 @@ namespace BookStack\Exceptions; -use BookStack\Auth\Access\LoginService; -use BookStack\Auth\User; +use BookStack\Access\LoginService; +use BookStack\Users\Models\User; use Illuminate\Contracts\Support\Responsable; +use Illuminate\Http\Request; class StoppedAuthenticationException extends \Exception implements Responsable { - - protected $user; - protected $loginService; - - /** - * StoppedAuthenticationException constructor. - */ - public function __construct(User $user, LoginService $loginService) - { - $this->user = $user; - $this->loginService = $loginService; + public function __construct( + protected User $user, + protected LoginService $loginService + ) { parent::__construct(); } /** - * @inheritdoc + * {@inheritdoc} */ public function toResponse($request) { $redirect = '/login'; if ($this->loginService->awaitingEmailConfirmation($this->user)) { - $redirect = '/register/confirm/awaiting'; - } else if ($this->loginService->needsMfaVerification($this->user)) { + return $this->awaitingEmailConfirmationResponse($request); + } + + if ($this->loginService->needsMfaVerification($this->user)) { $redirect = '/mfa/verify'; } return redirect($redirect); } -} \ No newline at end of file + + /** + * Provide an error response for when the current user's email is not confirmed + * in a system which requires it. + */ + protected function awaitingEmailConfirmationResponse(Request $request) + { + if ($request->wantsJson()) { + return response()->json([ + 'error' => [ + 'code' => 401, + 'message' => trans('errors.email_confirmation_awaiting'), + ], + ], 401); + } + + if (session()->pull('sent-email-confirmation') === true) { + return redirect('/register/confirm'); + } + + return redirect('/register/confirm/awaiting'); + } +}