X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a274406038e13cf678e14d65dfa70d04ead67206..refs/pull/3850/head:/app/Http/Controllers/Auth/ConfirmEmailController.php diff --git a/app/Http/Controllers/Auth/ConfirmEmailController.php b/app/Http/Controllers/Auth/ConfirmEmailController.php index 02b9ef276..b282d0601 100644 --- a/app/Http/Controllers/Auth/ConfirmEmailController.php +++ b/app/Http/Controllers/Auth/ConfirmEmailController.php @@ -10,16 +10,13 @@ use BookStack\Exceptions\UserTokenExpiredException; use BookStack\Exceptions\UserTokenNotFoundException; use BookStack\Http\Controllers\Controller; use Exception; -use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use Illuminate\Routing\Redirector; -use Illuminate\View\View; class ConfirmEmailController extends Controller { - protected $emailConfirmationService; - protected $loginService; - protected $userRepo; + protected EmailConfirmationService $emailConfirmationService; + protected LoginService $loginService; + protected UserRepo $userRepo; /** * Create a new controller instance. @@ -54,36 +51,40 @@ class ConfirmEmailController extends Controller return view('auth.user-unconfirmed', ['user' => $user]); } + /** + * Show the form for a user to provide their positive confirmation of their email. + */ + public function showAcceptForm(string $token) + { + return view('auth.register-confirm-accept', ['token' => $token]); + } + /** * Confirms an email via a token and logs the user into the system. * - * @param $token - * * @throws ConfirmationEmailException * @throws Exception - * - * @return RedirectResponse|Redirector */ - public function confirm($token) + public function confirm(Request $request) { - try { - $userId = $this->emailConfirmationService->checkTokenAndGetUserId($token); - } catch (Exception $exception) { - if ($exception instanceof UserTokenNotFoundException) { - $this->showErrorNotification(trans('errors.email_confirmation_invalid')); + $validated = $this->validate($request, [ + 'token' => ['required', 'string'] + ]); - return redirect('/register'); - } + $token = $validated['token']; - if ($exception instanceof UserTokenExpiredException) { - $user = $this->userRepo->getById($exception->userId); - $this->emailConfirmationService->sendConfirmation($user); - $this->showErrorNotification(trans('errors.email_confirmation_expired')); + try { + $userId = $this->emailConfirmationService->checkTokenAndGetUserId($token); + } catch (UserTokenNotFoundException $exception) { + $this->showErrorNotification(trans('errors.email_confirmation_invalid')); - return redirect('/register/confirm'); - } + return redirect('/register'); + } catch (UserTokenExpiredException $exception) { + $user = $this->userRepo->getById($exception->userId); + $this->emailConfirmationService->sendConfirmation($user); + $this->showErrorNotification(trans('errors.email_confirmation_expired')); - throw $exception; + return redirect('/register/confirm'); } $user = $this->userRepo->getById($userId); @@ -92,22 +93,17 @@ class ConfirmEmailController extends Controller $this->emailConfirmationService->deleteByUser($user); $this->showSuccessNotification(trans('auth.email_confirm_success')); - $this->loginService->login($user, auth()->getDefaultDriver()); - return redirect('/'); + return redirect('/login'); } /** * Resend the confirmation email. - * - * @param Request $request - * - * @return View */ public function resend(Request $request) { $this->validate($request, [ - 'email' => 'required|email|exists:users,email', + 'email' => ['required', 'email', 'exists:users,email'], ]); $user = $this->userRepo->getByEmail($request->get('email'));