‪TYPO3CMS  10.4
RedirectHandler.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
23 
30 {
34  protected ‪$userIsLoggedIn = false;
35 
39  protected ‪$requestHandler;
40 
44  protected ‪$redirectModeHandler;
45 
46  public function ‪__construct(
49  ‪Context $context
50  ) {
51  $this->requestHandler = ‪$requestHandler;
52  $this->redirectModeHandler = ‪$redirectModeHandler;
53  $this->userIsLoggedIn = (bool)$context->‪getPropertyFromAspect('frontend.user', 'isLoggedIn');
54  }
55 
65  public function ‪processRedirect(string $loginType, ‪RedirectConfiguration $configuration, string $redirectModeReferrer): string
66  {
67  if ($this->‪isUserLoginFailedAndLoginErrorActive($configuration->‪getModes(), $loginType)) {
68  return $this->redirectModeHandler->redirectModeLoginError($configuration->‪getPageOnLoginError());
69  }
70 
71  $redirectUrlList = [];
72  foreach ($configuration->‪getModes() as $redirectMode) {
73  $redirectUrl = '';
74 
75  if ($loginType === ‪LoginType::LOGIN) {
76  $redirectUrl = $this->‪handleSuccessfulLogin($redirectMode, $configuration->‪getPageOnLogin(), $configuration->‪getDomains(), $redirectModeReferrer);
77  } elseif ($loginType === ‪LoginType::LOGOUT) {
78  $redirectUrl = $this->‪handleSuccessfulLogout($redirectMode, $configuration->‪getPageOnLogout());
79  }
80 
81  if ($redirectUrl !== '') {
82  $redirectUrlList[] = $redirectUrl;
83  }
84  }
85 
86  return $this->‪fetchReturnUrlFromList($redirectUrlList, $configuration->‪getFirstMode());
87  }
88 
96  protected function ‪getLogoutRedirectUrl(array $redirectModes, int $redirectPageLogout = 0): string
97  {
98  if ($this->userIsLoggedIn && $this->‪isRedirectModeActive($redirectModes, ‪RedirectMode::LOGOUT)) {
99  return $this->redirectModeHandler->redirectModeLogout($redirectPageLogout);
100  }
101  return $this->‪getGetpostRedirectUrl($redirectModes);
102  }
103 
110  protected function ‪getGetpostRedirectUrl(array $redirectModes): string
111  {
112  return $this->‪isRedirectModeActive($redirectModes, ‪RedirectMode::GETPOST)
113  ? $this->requestHandler->getRedirectUrlRequestParam()
114  : '';
115  }
116 
124  protected function ‪handleSuccessfulLogout(string $redirectMode, int $redirectPageLogout): string
125  {
126  if ($redirectMode === ‪RedirectMode::LOGOUT) {
127  return $this->redirectModeHandler->redirectModeLogout($redirectPageLogout);
128  }
129  return '';
130  }
131 
139  protected function ‪fetchReturnUrlFromList(array $redirectUrlList, $redirectFirstMethod): string
140  {
141  if (count($redirectUrlList) === 0) {
142  return '';
143  }
144 
145  // Remove empty values, but keep "0" as value (that's why "strlen" is used as second parameter)
146  $redirectUrlList = array_filter($redirectUrlList, static function (string $value): bool {
147  return strlen($value) > 0;
148  });
149 
150  return $redirectFirstMethod
151  ? array_shift($redirectUrlList)
152  : array_pop($redirectUrlList);
153  }
154 
165  protected function ‪handleSuccessfulLogin(string $redirectMode, int $redirectPageLogin = 0, string $domains = '', string $redirectModeReferrer = ''): string
166  {
167  if (!$this->userIsLoggedIn) {
168  return '';
169  }
170 
171  // Logintype is needed because the login-page wouldn't be accessible anymore after a login (would always redirect)
172  switch ($redirectMode) {
174  $redirectUrl = $this->redirectModeHandler->redirectModeGroupLogin();
175  break;
177  $redirectUrl = $this->redirectModeHandler->redirectModeUserLogin();
178  break;
180  $redirectUrl = $this->redirectModeHandler->redirectModeLogin($redirectPageLogin);
181  break;
183  $redirectUrl = $this->requestHandler->getRedirectUrlRequestParam();
184  break;
186  $redirectUrl = $this->redirectModeHandler->redirectModeReferrer($redirectModeReferrer);
187  break;
189  $redirectUrl = $this->redirectModeHandler->redirectModeRefererDomains($domains, $redirectModeReferrer);
190  break;
191  default:
192  $redirectUrl = '';
193  }
194 
195  return $redirectUrl;
196  }
197 
198  protected function ‪isUserLoginFailedAndLoginErrorActive(array $redirectModes, string $loginType): bool
199  {
200  return $loginType === ‪LoginType::LOGIN
201  && !$this->userIsLoggedIn
202  && $this->‪isRedirectModeActive($redirectModes, ‪RedirectMode::LOGIN_ERROR);
203  }
204 
212  protected function ‪isRedirectModeActive(array $redirectModes, string $mode): bool
213  {
214  return in_array($mode, $redirectModes, true);
215  }
216 
224  public function ‪getLoginFormRedirectUrl(RedirectConfiguration $configuration, bool $redirectDisabled): string
225  {
226  if (!$redirectDisabled) {
227  return $this->‪getGetpostRedirectUrl($configuration->getModes());
228  }
229  return '';
230  }
231 
240  public function ‪getLogoutFormRedirectUrl(RedirectConfiguration $configuration, int $redirectPageLogout, bool $redirectDisabled): string
241  {
242  if (!$redirectDisabled) {
243  return $this->‪getLogoutRedirectUrl($configuration->getModes(), $redirectPageLogout);
244  }
245  return $this->requestHandler->getRedirectUrlRequestParam();
246  }
247 }
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\getLogoutRedirectUrl
‪string getLogoutRedirectUrl(array $redirectModes, int $redirectPageLogout=0)
Definition: RedirectHandler.php:93
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectModeHandler
Definition: RedirectModeHandler.php:34
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\REFERER
‪const REFERER
Definition: RedirectMode.php:33
‪TYPO3\CMS\Core\Context\Context\getPropertyFromAspect
‪mixed null getPropertyFromAspect(string $name, string $property, $default=null)
Definition: Context.php:144
‪TYPO3\CMS\FrontendLogin\Redirect\ServerRequestHandler
Definition: ServerRequestHandler.php:29
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration\getFirstMode
‪getFirstMode()
Definition: RedirectConfiguration.php:68
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\GETPOST
‪const GETPOST
Definition: RedirectMode.php:30
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration\getPageOnLoginError
‪getPageOnLoginError()
Definition: RedirectConfiguration.php:83
‪TYPO3\CMS\Core\Authentication\LoginType
Definition: LoginType.php:26
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration\getDomains
‪getDomains()
Definition: RedirectConfiguration.php:78
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\isUserLoginFailedAndLoginErrorActive
‪isUserLoginFailedAndLoginErrorActive(array $redirectModes, string $loginType)
Definition: RedirectHandler.php:195
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:53
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\GROUP_LOGIN
‪const GROUP_LOGIN
Definition: RedirectMode.php:32
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration\getModes
‪getModes()
Definition: RedirectConfiguration.php:63
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\handleSuccessfulLogin
‪string handleSuccessfulLogin(string $redirectMode, int $redirectPageLogin=0, string $domains='', string $redirectModeReferrer='')
Definition: RedirectHandler.php:162
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\$redirectModeHandler
‪RedirectModeHandler $redirectModeHandler
Definition: RedirectHandler.php:41
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\USER_LOGIN
‪const USER_LOGIN
Definition: RedirectMode.php:31
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\processRedirect
‪string processRedirect(string $loginType, RedirectConfiguration $configuration, string $redirectModeReferrer)
Definition: RedirectHandler.php:62
‪TYPO3\CMS\FrontendLogin\Redirect
Definition: RedirectHandler.php:18
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\fetchReturnUrlFromList
‪string fetchReturnUrlFromList(array $redirectUrlList, $redirectFirstMethod)
Definition: RedirectHandler.php:136
‪TYPO3\CMS\Core\Authentication\LoginType\LOGOUT
‪const LOGOUT
Definition: LoginType.php:35
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\LOGOUT
‪const LOGOUT
Definition: RedirectMode.php:28
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\LOGIN
‪const LOGIN
Definition: RedirectMode.php:27
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\LOGIN_ERROR
‪const LOGIN_ERROR
Definition: RedirectMode.php:29
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectMode\REFERER_DOMAINS
‪const REFERER_DOMAINS
Definition: RedirectMode.php:34
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\handleSuccessfulLogout
‪string handleSuccessfulLogout(string $redirectMode, int $redirectPageLogout)
Definition: RedirectHandler.php:121
‪TYPO3\CMS\Core\Authentication\LoginType\LOGIN
‪const LOGIN
Definition: LoginType.php:30
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\$requestHandler
‪ServerRequestHandler $requestHandler
Definition: RedirectHandler.php:37
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\getLoginFormRedirectUrl
‪string getLoginFormRedirectUrl(RedirectConfiguration $configuration, bool $redirectDisabled)
Definition: RedirectHandler.php:221
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\isRedirectModeActive
‪bool isRedirectModeActive(array $redirectModes, string $mode)
Definition: RedirectHandler.php:209
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration
Definition: RedirectConfiguration.php:28
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration\getPageOnLogout
‪getPageOnLogout()
Definition: RedirectConfiguration.php:88
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\__construct
‪__construct(ServerRequestHandler $requestHandler, RedirectModeHandler $redirectModeHandler, Context $context)
Definition: RedirectHandler.php:43
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\getGetpostRedirectUrl
‪string getGetpostRedirectUrl(array $redirectModes)
Definition: RedirectHandler.php:107
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler
Definition: RedirectHandler.php:30
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\getLogoutFormRedirectUrl
‪string getLogoutFormRedirectUrl(RedirectConfiguration $configuration, int $redirectPageLogout, bool $redirectDisabled)
Definition: RedirectHandler.php:237
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration\getPageOnLogin
‪getPageOnLogin()
Definition: RedirectConfiguration.php:73
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler\$userIsLoggedIn
‪bool $userIsLoggedIn
Definition: RedirectHandler.php:33