From 3e4c24bbc13a6d4d772aba7edd26112be5237c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=91cze=20Bence?= Date: Sun, 16 Apr 2023 17:40:49 +0200 Subject: [PATCH] implement redirect after login --- public/static/js/maps.js | 4 +- src/Controller/LoginController.php | 63 ++++++++++++++++++++++-------- views/login/google_signup.php | 2 +- views/login/login.php | 2 +- views/login/reset_password.php | 2 +- views/maps.php | 14 +++---- 6 files changed, 55 insertions(+), 32 deletions(-) diff --git a/public/static/js/maps.js b/public/static/js/maps.js index 35c4e33..d8f7a9f 100644 --- a/public/static/js/maps.js +++ b/public/static/js/maps.js @@ -69,7 +69,7 @@ printTimeForHuman: function (time) { const minutes = Math.floor(time / 60); const seconds = time % 60; - var time_str = ''; + var time_str = ''; if (minutes == 1) { time_str += '1 minute'; @@ -141,9 +141,7 @@ if (document.getElementById('challengeButton')) { document.getElementById('challengeButton').onclick = function () { MapGuesser.showModal('challenge'); - document.getElementById('createNewChallengeButton').href = '/challenge/new/' + this.dataset.mapId; document.getElementById('playMode').style.visibility = 'hidden'; - var timeLimit = document.getElementById('timeLimit').value; document.getElementById('timeLimitLabel').innerText = 'Time limit of ' + Util.printTimeForHuman(timeLimit); }; diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index 5536d23..fcf24be 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -36,6 +36,8 @@ class LoginController private UserPlayedPlaceRepository $userPlayedPlaceRepository; + private string $redirectUrl; + public function __construct(IRequest $request) { $this->request = $request; @@ -44,15 +46,19 @@ class LoginController $this->userConfirmationRepository = new UserConfirmationRepository(); $this->userPasswordResetterRepository = new UserPasswordResetterRepository(); $this->userPlayedPlaceRepository = new UserPlayedPlaceRepository(); + $this->redirectUrl = $this->request->session()->has('redirect_after_login') ? + $this->request->session()->get('redirect_after_login') : + \Container::$routeCollection->getRoute('index')->generateLink(); } public function getLoginForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } - return new HtmlContent('login/login'); + return new HtmlContent('login/login', ['redirectUrl' => '/' . $this->redirectUrl]); } public function getGoogleLoginRedirect(): IRedirect @@ -76,7 +82,8 @@ class LoginController public function getSignupForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } if ($this->request->session()->has('tmp_user_data')) { @@ -98,7 +105,8 @@ class LoginController public function getSignupWithGoogleForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } if (!$this->request->session()->has('google_user_data')) { @@ -109,13 +117,14 @@ class LoginController $user = $this->userRepository->getByEmail($userData['email']); - return new HtmlContent('login/google_signup', ['found' => $user !== null, 'email' => $userData['email']]); + return new HtmlContent('login/google_signup', ['found' => $user !== null, 'email' => $userData['email'], 'redirectUrl' => '/' . $this->redirectUrl]); } public function getRequestPasswordResetForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } return new HtmlContent('login/password_reset_request', ['email' => $this->request->query('email')]); @@ -129,7 +138,8 @@ class LoginController public function getResetPasswordForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } $token = $this->request->query('token'); @@ -141,12 +151,13 @@ class LoginController $user = $this->userRepository->getById($resetter->getUserId()); - return new HtmlContent('login/reset_password', ['success' => true, 'token' => $token, 'email' => $user->getEmail()]); + return new HtmlContent('login/reset_password', ['success' => true, 'token' => $token, 'email' => $user->getEmail(), 'redirectUrl' => '/' . $this->redirectUrl]); } public function login(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -198,13 +209,15 @@ class LoginController $this->request->setUser($user); + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } public function loginWithGoogle() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } if ($this->request->query('state') !== $this->request->session()->get('oauth_state')) { @@ -242,7 +255,8 @@ class LoginController $this->request->setUser($user); - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } public function logout(): IRedirect @@ -255,7 +269,8 @@ class LoginController public function signup(): IContent { if ($this->request->user() !== null) { - return new JsonContent(['redirect' => ['target' => '/' . \Container::$routeCollection->getRoute('home')->generateLink()]]); + $this->deleteRedirectUrl(); + return new JsonContent(['redirect' => ['target' => '/' . $this->redirectUrl]]); } $user = $this->userRepository->getByEmail($this->request->post('email')); @@ -274,7 +289,8 @@ class LoginController $this->request->setUser($user); - $data = ['redirect' => ['target' => '/' . \Container::$routeCollection->getRoute('index')->generateLink()]]; + $this->deleteRedirectUrl(); + $data = ['redirect' => ['target' => '/' . $this->redirectUrl]]; } else { $data = [ 'error' => [ @@ -355,6 +371,7 @@ class LoginController public function signupWithGoogle(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -384,6 +401,7 @@ class LoginController $this->request->session()->delete('google_user_data'); $this->request->setUser($user); + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -404,7 +422,8 @@ class LoginController public function activate() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } $confirmation = $this->userConfirmationRepository->getByToken(substr($this->request->query('token'), 0, 32)); @@ -426,13 +445,15 @@ class LoginController $this->request->setUser($user); - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } public function cancel() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } $confirmation = $this->userConfirmationRepository->getByToken(substr($this->request->query('token'), 0, 32)); @@ -461,9 +482,10 @@ class LoginController public function requestPasswordReset(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent([ 'redirect' => [ - 'target' => '/' . \Container::$routeCollection->getRoute('home')->generateLink() + 'target' => '/' . $this->redirectUrl ] ]); } @@ -538,9 +560,10 @@ class LoginController public function resetPassword(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent([ 'redirect' => [ - 'target' => '/' . \Container::$routeCollection->getRoute('home')->generateLink() + 'target' => '/' . $this->redirectUrl ] ]); } @@ -581,6 +604,7 @@ class LoginController $this->request->setUser($user); + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -641,4 +665,9 @@ class LoginController ]); $mail->send(); } + + private function deleteRedirectUrl(): void + { + $this->request->session()->delete('redirect_after_login'); + } } diff --git a/views/login/google_signup.php b/views/login/google_signup.php index 1cb0149..e056e58 100644 --- a/views/login/google_signup.php +++ b/views/login/google_signup.php @@ -5,7 +5,7 @@ @section(main)

Sign up

-
+

Please confirm that you link your account to your Google account.

diff --git a/views/login/login.php b/views/login/login.php index 77881a0..405eee1 100644 --- a/views/login/login.php +++ b/views/login/login.php @@ -3,7 +3,7 @@ @section(main)

Login

- +

diff --git a/views/login/reset_password.php b/views/login/reset_password.php index 28dc505..f88903f 100644 --- a/views/login/reset_password.php +++ b/views/login/reset_password.php @@ -4,7 +4,7 @@

Reset password

- + diff --git a/views/maps.php b/views/maps.php index 82a79c9..8f5e2d4 100644 --- a/views/maps.php +++ b/views/maps.php @@ -96,16 +96,12 @@ TODO: condition!
- user()): ?> - - - Edit - - - - + + + Edit + - Play this map +