‪TYPO3CMS  9.5
LoginController.php
Go to the documentation of this file.
1 <?php
2 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 
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
20 use Psr\Log\LoggerAwareInterface;
21 use Psr\Log\LoggerAwareTrait;
22 use Symfony\Component\HttpFoundation\Cookie;
43 
48 class ‪LoginController implements LoggerAwareInterface
49 {
50  use LoggerAwareTrait;
51 
57  protected ‪$redirectUrl;
58 
64  protected ‪$redirectToURL;
65 
72 
78  protected ‪$loginProviders = [];
79 
87  protected ‪$loginRefresh;
88 
94  protected ‪$submitValue;
95 
99  protected ‪$view;
100 
104  public function ‪__construct()
105  {
106  // @deprecated since TYPO3 v9, will be obsolete in TYPO3 v10.0
107  $request = ‪$GLOBALS['TYPO3_REQUEST'];
108  $parsedBody = $request->getParsedBody();
109  $queryParams = $request->getQueryParams();
111 
112  $this->redirectUrl = GeneralUtility::sanitizeLocalUrl($parsedBody['redirect_url'] ?? $queryParams['redirect_url'] ?? null);
113  $this->loginProviderIdentifier = $this->‪detectLoginProvider($request);
114 
115  $this->loginRefresh = (bool)($parsedBody['loginRefresh'] ?? $queryParams['loginRefresh'] ?? false);
116  // Value of "Login" button. If set, the login button was pressed.
117  $this->submitValue = $parsedBody['commandLI'] ?? $queryParams['commandLI'] ?? null;
118  // Try to get the preferred browser language
120  ‪$locales = GeneralUtility::makeInstance(Locales::class);
121  $httpAcceptLanguage = $request->getServerParams()['HTTP_ACCEPT_LANGUAGE'];
122  $preferredBrowserLanguage = ‪$locales
123  ->getPreferredClientLanguage($httpAcceptLanguage);
124 
125  // If we found a $preferredBrowserLanguage and it is not the default language and no be_user is logged in
126  // initialize $this->getLanguageService() again with $preferredBrowserLanguage
127  if ($preferredBrowserLanguage !== 'default' && empty($this->‪getBackendUserAuthentication()->user['uid'])) {
128  $this->‪getLanguageService()->‪init($preferredBrowserLanguage);
129  GeneralUtility::makeInstance(PageRenderer::class)->setLanguage($preferredBrowserLanguage);
130  }
131 
132  $this->‪getLanguageService()->‪includeLLFile('EXT:backend/Resources/Private/Language/locallang_login.xlf');
133 
134  // Setting the redirect URL to "index.php?M=main" if no alternative input is given
135  if ($this->redirectUrl) {
136  $this->redirectToURL = ‪$this->redirectUrl;
137  } else {
138  // (consolidate RouteDispatcher::evaluateReferrer() when changing 'main' to something different)
139  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
140  $this->redirectToURL = (string)$uriBuilder->buildUriFromRoute('main');
141  }
142 
143  // If "L" is "OUT", then any logged in is logged out. If redirect_url is given, we redirect to it
144  if (($parsedBody['L'] ?? $queryParams['L'] ?? null) === 'OUT' && is_object($this->‪getBackendUserAuthentication())) {
146  $this->‪redirectToUrl();
147  }
148 
149  $this->view = $this->‪getFluidTemplateObject();
150  }
151 
159  public function ‪formAction(ServerRequestInterface $request): ResponseInterface
160  {
161  return new ‪HtmlResponse($this->‪createLoginLogoutForm($request));
162  }
163 
170  public function ‪refreshAction(ServerRequestInterface $request): ResponseInterface
171  {
172  $this->loginRefresh = true;
173  return new ‪HtmlResponse($this->‪createLoginLogoutForm($request));
174  }
175 
183  public function ‪main(): string
184  {
185  trigger_error('LoginController->main() will be replaced by protected method createLoginLogoutForm() in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
186  return $this->‪createLoginLogoutForm(‪$GLOBALS['TYPO3_REQUEST']);
187  }
188 
196  protected function ‪createLoginLogoutForm(ServerRequestInterface $request): string
197  {
199  $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
200  $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/Login');
201 
202  // Checking, if we should make a redirect.
203  // Might set JavaScript in the header to close window.
204  $this->‪checkRedirect($request);
205 
206  // Extension Configuration
207  ‪$extConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('backend');
208 
209  // Background Image
210  if (!empty(‪$extConf['loginBackgroundImage'])) {
211  $backgroundImage = $this->‪getUriForFileName(‪$extConf['loginBackgroundImage']);
212  if ($backgroundImage === '') {
213  $this->logger->warning(
214  'The configured TYPO3 backend login background image "' . htmlspecialchars(‪$extConf['loginBackgroundImage']) .
215  '" can\'t be resolved. Please check if the file exists and the extension is activated.'
216  );
217  }
218  $this->‪getDocumentTemplate()->inDocStylesArray[] = '
219  .typo3-login-carousel-control.right,
220  .typo3-login-carousel-control.left,
221  .panel-login { border: 0; }
222  .typo3-login { background-image: url("' . $backgroundImage . '"); }
223  .typo3-login-footnote { background-color: #000000; color: #ffffff; opacity: 0.5; }
224  ';
225  }
226 
227  // Login Footnote
228  if (!empty(‪$extConf['loginFootnote'])) {
229  $this->view->assign('loginFootnote', strip_tags(trim(‪$extConf['loginFootnote'])));
230  }
231 
232  // Add additional css to use the highlight color in the login screen
233  if (!empty(‪$extConf['loginHighlightColor'])) {
234  $this->‪getDocumentTemplate()->inDocStylesArray[] = '
235  .btn-login.disabled, .btn-login[disabled], fieldset[disabled] .btn-login,
236  .btn-login.disabled:hover, .btn-login[disabled]:hover, fieldset[disabled] .btn-login:hover,
237  .btn-login.disabled:focus, .btn-login[disabled]:focus, fieldset[disabled] .btn-login:focus,
238  .btn-login.disabled.focus, .btn-login[disabled].focus, fieldset[disabled] .btn-login.focus,
239  .btn-login.disabled:active, .btn-login[disabled]:active, fieldset[disabled] .btn-login:active,
240  .btn-login.disabled.active, .btn-login[disabled].active, fieldset[disabled] .btn-login.active,
241  .btn-login:hover, .btn-login:focus, .btn-login:active,
242  .btn-login:active:hover, .btn-login:active:focus,
243  .btn-login { background-color: ' . ‪$extConf['loginHighlightColor'] . '; }
244  .panel-login .panel-body { border-color: ' . ‪$extConf['loginHighlightColor'] . '; }
245  ';
246  }
247 
248  // Logo
249  if (!empty(‪$extConf['loginLogo'])) {
250  if ($this->‪getUriForFileName(‪$extConf['loginLogo']) === '') {
251  $this->logger->warning(
252  'The configured TYPO3 backend login logo "' . htmlspecialchars(‪$extConf['loginLogo']) .
253  '" can\'t be resolved. Please check if the file exists and the extension is activated.'
254  );
255  }
256  $logo = ‪$extConf['loginLogo'];
257  } else {
258  // Use TYPO3 logo depending on highlight color
259  if (!empty(‪$extConf['loginHighlightColor'])) {
260  $logo = 'EXT:backend/Resources/Public/Images/typo3_black.svg';
261  } else {
262  $logo = 'EXT:backend/Resources/Public/Images/typo3_orange.svg';
263  }
264  $this->‪getDocumentTemplate()->inDocStylesArray[] = '
265  .typo3-login-logo .typo3-login-image { max-width: 150px; height:100%;}
266  ';
267  }
268  $logo = $this->‪getUriForFileName($logo);
269 
270  // Start form
271  $formType = empty($this->‪getBackendUserAuthentication()->user['uid']) ? 'LoginForm' : 'LogoutForm';
272  $this->view->assignMultiple([
273  'backendUser' => $this->‪getBackendUserAuthentication()->user,
274  'hasLoginError' => $this->‪isLoginInProgress($request),
275  'formType' => $formType,
276  'logo' => $logo,
277  'images' => [
278  'capslock' => $this->‪getUriForFileName('EXT:backend/Resources/Public/Images/icon_capslock.svg'),
279  'typo3' => $this->‪getUriForFileName('EXT:backend/Resources/Public/Images/typo3_orange.svg'),
280  ],
282  'redirectUrl' => $this->redirectUrl,
283  'loginRefresh' => $this->loginRefresh,
284  'loginNewsItems' => $this->‪getSystemNews(),
285  'referrerCheckEnabled' => GeneralUtility::makeInstance(Features::class)->isFeatureEnabled('security.backend.enforceReferrer'),
286  'loginUrl' => (string)$request->getUri(),
287  'loginProviderIdentifier' => $this->loginProviderIdentifier,
288  'loginProviders' => $this->loginProviders
289  ]);
290 
291  // Initialize interface selectors:
292  $this->‪makeInterfaceSelector($request);
293 
295  $loginProvider = GeneralUtility::makeInstance($this->loginProviders[$this->loginProviderIdentifier]['provider']);
296  $loginProvider->render($this->view, $pageRenderer, $this);
297 
298  $content = $this->‪getDocumentTemplate()->‪startPage('TYPO3 CMS Login: ' . ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']);
299  $content .= $this->view->render();
300  $content .= $this->‪getDocumentTemplate()->‪endPage();
301 
302  return $content;
303  }
304 
315  protected function ‪checkRedirect(ServerRequestInterface $request): void
316  {
317  $backendUser = $this->‪getBackendUserAuthentication();
318  if (empty($backendUser->user['uid'])) {
319  return;
320  }
321 
322  /*
323  * If no cookie has been set previously, we tell people that this is a problem.
324  * This assumes that a cookie-setting script (like this one) has been hit at
325  * least once prior to this instance.
326  */
327  if (!isset($_COOKIE[‪BackendUserAuthentication::getCookieName()])) {
328  if ($this->submitValue === 'setCookie') {
329  /*
330  * we tried it a second time but still no cookie
331  * 26/4 2005: This does not work anymore, because the saving of challenge values
332  * in $_SESSION means the system will act as if the password was wrong.
333  */
334  throw new \RuntimeException('Login-error: Yeah, that\'s a classic. No cookies, no TYPO3. ' .
335  'Please accept cookies from TYPO3 - otherwise you\'ll not be able to use the system.', 1294586846);
336  }
337  // try it once again - that might be needed for auto login
338  $this->redirectToURL = 'index.php?commandLI=setCookie';
339  }
340  $redirectToUrl = (string)($backendUser->getTSConfig()['auth.']['BE.']['redirectToURL'] ?? '');
341  if (empty($redirectToUrl)) {
342  // Based on the interface we set the redirect script
343  $parsedBody = $request->getParsedBody();
344  $queryParams = $request->getQueryParams();
345  $interface = $parsedBody['interface'] ?? $queryParams['interface'] ?? '';
346  switch ($interface) {
347  case 'frontend':
348  $this->redirectToURL = '../';
349  break;
350  case 'backend':
351  // (consolidate RouteDispatcher::evaluateReferrer() when changing 'main' to something different)
352  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
353  $this->redirectToURL = (string)$uriBuilder->buildUriFromRoute('main');
354  break;
355  }
356  } else {
357  $this->redirectToURL = $redirectToUrl;
358  $interface = '';
359  }
360  // store interface
361  $backendUser->uc['interfaceSetup'] = $interface;
362  $backendUser->writeUC();
363 
364  $formProtection = ‪FormProtectionFactory::get();
365  if (!$formProtection instanceof BackendFormProtection) {
366  throw new \RuntimeException('The Form Protection retrieved does not match the expected one.', 1432080411);
367  }
368  if ($this->loginRefresh) {
369  $formProtection->setSessionTokenFromRegistry();
370  $formProtection->persistSessionToken();
371  $this->‪getDocumentTemplate()->JScode .= GeneralUtility::wrapJS('
372  if (window.opener && window.opener.TYPO3 && window.opener.TYPO3.LoginRefresh) {
373  window.opener.TYPO3.LoginRefresh.startTask();
374  window.close();
375  }
376  ');
377  } else {
378  $formProtection->storeSessionTokenInRegistry();
379  $this->‪redirectToUrl();
380  }
381  }
382 
388  public function ‪makeInterfaceSelectorBox(): void
389  {
390  trigger_error('LoginController->makeInterfaceSelectorBox() will be replaced by protected method makeInterfaceSelector() in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
391  $this->‪makeInterfaceSelector(‪$GLOBALS['TYPO3_REQUEST']);
392  }
393 
398  protected function ‪makeInterfaceSelector(ServerRequestInterface $request): void
399  {
400  // If interfaces are defined AND no input redirect URL in GET vars:
401  if (‪$GLOBALS['TYPO3_CONF_VARS']['BE']['interfaces'] && ($this->‪isLoginInProgress($request) || !$this->redirectUrl)) {
402  $parts = GeneralUtility::trimExplode(',', ‪$GLOBALS['TYPO3_CONF_VARS']['BE']['interfaces']);
403  if (count($parts) > 1) {
404  // Only if more than one interface is defined we will show the selector
405  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
406  $interfaces = [
407  'backend' => [
408  'label' => $this->‪getLanguageService()->‪getLL('interface.backend'),
409  'jumpScript' => (string)$uriBuilder->buildUriFromRoute('main'),
410  'interface' => 'backend'
411  ],
412  'frontend' => [
413  'label' => $this->‪getLanguageService()->‪getLL('interface.frontend'),
414  'jumpScript' => '../',
415  'interface' => 'frontend'
416  ]
417  ];
418 
419  $this->view->assign('showInterfaceSelector', true);
420  $this->view->assign('interfaces', $interfaces);
421  } elseif (!$this->redirectUrl) {
422  // If there is only ONE interface value set and no redirect_url is present
423  $this->view->assign('showInterfaceSelector', false);
424  $this->view->assign('interface', $parts[0]);
425  }
426  }
427  }
428 
435  protected function ‪getSystemNews(): array
436  {
437  $systemNewsTable = 'sys_news';
438  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
439  ->getQueryBuilderForTable($systemNewsTable);
440  $systemNews = [];
441  $systemNewsRecords = $queryBuilder
442  ->select('title', 'content', 'crdate')
443  ->from($systemNewsTable)
444  ->orderBy('crdate', 'DESC')
445  ->execute()
446  ->fetchAll();
447  foreach ($systemNewsRecords as $systemNewsRecord) {
448  $systemNews[] = [
449  'date' => date(‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'], (int)$systemNewsRecord['crdate']),
450  'header' => $systemNewsRecord['title'],
451  'content' => $systemNewsRecord['content']
452  ];
453  }
454  return $systemNews;
455  }
456 
466  private function ‪getUriForFileName($filename): string
467  {
468  // Check if it's already a URL
469  if (preg_match('/^(https?:)?\/\//', $filename)) {
470  return $filename;
471  }
472  $absoluteFilename = GeneralUtility::getFileAbsFileName(ltrim($filename, '/'));
473  $filename = '';
474  if ($absoluteFilename !== '' && @is_file($absoluteFilename)) {
475  $filename = ‪PathUtility::getAbsoluteWebPath($absoluteFilename);
476  }
477  return $filename;
478  }
479 
486  protected function ‪isLoginInProgress(ServerRequestInterface $request): bool
487  {
488  $parsedBody = $request->getParsedBody();
489  $queryParams = $request->getQueryParams();
490  $username = $parsedBody['username'] ?? $queryParams['username'] ?? null;
491  return !empty($username) || !empty($this->submitValue);
492  }
493 
499  protected function ‪getFluidTemplateObject()
500  {
502  ‪$view = GeneralUtility::makeInstance(StandaloneView::class);
503  ‪$view->‪setLayoutRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Layouts')]);
504  ‪$view->‪setPartialRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Partials')]);
505  ‪$view->‪setTemplateRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Templates')]);
506 
507  ‪$view->‪getRequest()->setControllerExtensionName('Backend');
508  return ‪$view;
509  }
510 
514  protected function ‪redirectToUrl(): void
515  {
516  ‪HttpUtility::redirect($this->redirectToURL);
517  }
518 
524  protected function ‪validateAndSortLoginProviders()
525  {
526  $providers = ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] ?? [];
527  if (empty($providers) || !is_array($providers)) {
528  throw new \RuntimeException('No login providers are registered in $GLOBALS[\'TYPO3_CONF_VARS\'][\'EXTCONF\'][\'backend\'][\'loginProviders\'].', 1433417281);
529  }
530  foreach ($providers as $identifier => $configuration) {
531  if (empty($configuration) || !is_array($configuration)) {
532  throw new \RuntimeException('Missing configuration for login provider "' . $identifier . '".', 1433416043);
533  }
534  if (!is_string($configuration['provider']) || empty($configuration['provider']) || !class_exists($configuration['provider']) || !is_subclass_of($configuration['provider'], LoginProviderInterface::class)) {
535  throw new \RuntimeException('The login provider "' . $identifier . '" defines an invalid provider. Ensure the class exists and implements the "' . LoginProviderInterface::class . '".', 1460977275);
536  }
537  if (empty($configuration['label'])) {
538  throw new \RuntimeException('Missing label definition for login provider "' . $identifier . '".', 1433416044);
539  }
540  if (empty($configuration['icon-class'])) {
541  throw new \RuntimeException('Missing icon definition for login provider "' . $identifier . '".', 1433416045);
542  }
543  if (!isset($configuration['sorting'])) {
544  throw new \RuntimeException('Missing sorting definition for login provider "' . $identifier . '".', 1433416046);
545  }
546  }
547  // sort providers
548  uasort($providers, function ($a, $b) {
549  return $b['sorting'] - $a['sorting'];
550  });
551  $this->loginProviders = $providers;
552  }
553 
561  protected function ‪detectLoginProvider(ServerRequestInterface $request): string
562  {
563  $parsedBody = $request->getParsedBody();
564  $queryParams = $request->getQueryParams();
565  $loginProvider = $parsedBody['loginProvider'] ?? $queryParams['loginProvider'] ?? '';
566  if ((empty($loginProvider) || !isset($this->loginProviders[$loginProvider])) && !empty($_COOKIE['be_lastLoginProvider'])) {
567  $loginProvider = $_COOKIE['be_lastLoginProvider'];
568  }
569  if (empty($loginProvider) || !isset($this->loginProviders[$loginProvider])) {
570  reset($this->loginProviders);
571  $loginProvider = key($this->loginProviders);
572  }
573  // Use the secure option when the current request is served by a secure connection
575  $normalizedParams = $request->getAttribute('normalizedParams');
576  $isHttps = $normalizedParams->isHttps();
577  $cookieSecure = (bool)‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['cookieSecure'] && $isHttps;
578  $cookie = new Cookie(
579  'be_lastLoginProvider',
580  (string)$loginProvider,
581  ‪$GLOBALS['EXEC_TIME'] + 7776000, // 90 days
582  $normalizedParams->getSitePath() . TYPO3_mainDir,
583  '',
584  $cookieSecure,
585  true,
586  false,
587  Cookie::SAMESITE_STRICT
588  );
589  header('Set-Cookie: ' . $cookie->__toString(), false);
590 
591  return (string)$loginProvider;
592  }
593 
597  public function ‪getLoginProviderIdentifier()
598  {
600  }
601 
607  protected function ‪getLanguageService(): ‪LanguageService
608  {
609  return ‪$GLOBALS['LANG'];
610  }
611 
616  {
617  return ‪$GLOBALS['BE_USER'];
618  }
619 
625  protected function ‪getDocumentTemplate(): ‪DocumentTemplate
626  {
627  return ‪$GLOBALS['TBE_TEMPLATE'];
628  }
629 }
‪TYPO3\CMS\Backend\Controller\LoginController\isLoginInProgress
‪bool isLoginInProgress(ServerRequestInterface $request)
Definition: LoginController.php:479
‪TYPO3\CMS\Backend\Controller\LoginController\makeInterfaceSelectorBox
‪makeInterfaceSelectorBox()
Definition: LoginController.php:381
‪TYPO3\CMS\Backend\Controller\LoginController\$redirectToURL
‪string $redirectToURL
Definition: LoginController.php:62
‪TYPO3\CMS\Core\Localization\LanguageService\includeLLFile
‪mixed includeLLFile($fileRef, $setGlobal=true, $mergeLocalOntoDefault=false)
Definition: LanguageService.php:260
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderInterface
Definition: LoginProviderInterface.php:25
‪TYPO3\CMS\Core\FormProtection\FormProtectionFactory\get
‪static TYPO3 CMS Core FormProtection AbstractFormProtection get($classNameOrType='default',... $constructorArguments)
Definition: FormProtectionFactory.php:72
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:23
‪TYPO3\CMS\Backend\Controller\LoginController\getLanguageService
‪LanguageService getLanguageService()
Definition: LoginController.php:600
‪TYPO3\CMS\Backend\Controller\LoginController\getLoginProviderIdentifier
‪string getLoginProviderIdentifier()
Definition: LoginController.php:590
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:42
‪TYPO3\CMS\Backend\Controller\LoginController\refreshAction
‪ResponseInterface refreshAction(ServerRequestInterface $request)
Definition: LoginController.php:163
‪TYPO3\CMS\Backend\Controller\LoginController\$view
‪StandaloneView $view
Definition: LoginController.php:92
‪TYPO3\CMS\Backend\Controller\LoginController\getDocumentTemplate
‪DocumentTemplate getDocumentTemplate()
Definition: LoginController.php:618
‪TYPO3\CMS\Core\FormProtection\BackendFormProtection
Definition: BackendFormProtection.php:73
‪TYPO3\CMS\Backend\Controller\LoginController\$redirectUrl
‪string $redirectUrl
Definition: LoginController.php:56
‪TYPO3\CMS\Backend\Controller\LoginController\$loginProviderIdentifier
‪string $loginProviderIdentifier
Definition: LoginController.php:68
‪TYPO3\CMS\Core\Localization\Locales
Definition: Locales.php:29
‪TYPO3\CMS\Backend\Controller\LoginController\getUriForFileName
‪string getUriForFileName($filename)
Definition: LoginController.php:459
‪TYPO3\CMS\Backend\Controller\LoginController\getBackendUserAuthentication
‪BackendUserAuthentication getBackendUserAuthentication()
Definition: LoginController.php:608
‪TYPO3\CMS\Backend\Controller\LoginController\getSystemNews
‪array getSystemNews()
Definition: LoginController.php:428
‪TYPO3\CMS\Backend\Controller\LoginController\$loginProviders
‪array $loginProviders
Definition: LoginController.php:74
‪TYPO3\CMS\Backend\Exception
Definition: BackendLockedException.php:3
‪TYPO3\CMS\Backend\Template\DocumentTemplate\startPage
‪string startPage($title)
Definition: DocumentTemplate.php:445
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\getCookieName
‪static string getCookieName()
Definition: BackendUserAuthentication.php:2529
‪TYPO3\CMS\Core\Page\PageRenderer
Definition: PageRenderer.php:35
‪TYPO3\CMS\Backend\Controller\LoginController\main
‪string main()
Definition: LoginController.php:176
‪TYPO3\CMS\Backend\Controller\LoginController\createLoginLogoutForm
‪string createLoginLogoutForm(ServerRequestInterface $request)
Definition: LoginController.php:189
‪TYPO3\CMS\Backend\Controller\LoginController\$loginRefresh
‪bool $loginRefresh
Definition: LoginController.php:82
‪TYPO3\CMS\Backend\Template\DocumentTemplate
Definition: DocumentTemplate.php:48
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:35
‪TYPO3\CMS\Core\Localization\LanguageService\init
‪init($languageKey)
Definition: LanguageService.php:84
‪TYPO3\CMS\Backend\Controller\LoginController\validateAndSortLoginProviders
‪validateAndSortLoginProviders()
Definition: LoginController.php:517
‪$locales
‪$locales
Definition: be_users.php:6
‪TYPO3\CMS\Core\Configuration\Features
Definition: Features.php:54
‪TYPO3\CMS\Backend\Controller\LoginController\makeInterfaceSelector
‪makeInterfaceSelector(ServerRequestInterface $request)
Definition: LoginController.php:391
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:45
‪TYPO3\CMS\Backend\Utility\BackendUtility
Definition: BackendUtility.php:72
‪TYPO3\CMS\Backend\Controller\LoginController\formAction
‪ResponseInterface formAction(ServerRequestInterface $request)
Definition: LoginController.php:152
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication\logoff
‪logoff()
Definition: BackendUserAuthentication.php:2758
‪TYPO3\CMS\Backend\Controller\LoginController\$submitValue
‪string $submitValue
Definition: LoginController.php:88
‪TYPO3\CMS\Backend\Controller\LoginController\redirectToUrl
‪redirectToUrl()
Definition: LoginController.php:507
‪TYPO3\CMS\Core\FormProtection\FormProtectionFactory
Definition: FormProtectionFactory.php:45
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:32
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Backend\Controller\LoginController\getFluidTemplateObject
‪StandaloneView getFluidTemplateObject()
Definition: LoginController.php:492
‪TYPO3\CMS\Fluid\View\AbstractTemplateView\setLayoutRootPaths
‪setLayoutRootPaths(array $layoutRootPaths)
Definition: AbstractTemplateView.php:164
‪TYPO3\CMS\Core\Utility\HttpUtility
Definition: HttpUtility.php:21
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:29
‪TYPO3\CMS\Fluid\View\StandaloneView\getRequest
‪WebRequest getRequest()
Definition: StandaloneView.php:109
‪TYPO3\CMS\Backend\Template\DocumentTemplate\endPage
‪string endPage()
Definition: DocumentTemplate.php:531
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:44
‪TYPO3\CMS\Fluid\View\AbstractTemplateView\setPartialRootPaths
‪setPartialRootPaths(array $partialRootPaths)
Definition: AbstractTemplateView.php:131
‪TYPO3\CMS\Backend\Controller\LoginController\__construct
‪__construct()
Definition: LoginController.php:97
‪$extConf
‪$extConf
Definition: ext_localconf.php:50
‪TYPO3\CMS\Core\Localization\LanguageService\getLL
‪string getLL($index)
Definition: LanguageService.php:118
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:45
‪TYPO3\CMS\Core\Utility\PathUtility\getAbsoluteWebPath
‪static string getAbsoluteWebPath($targetPath)
Definition: PathUtility.php:42
‪TYPO3\CMS\Backend\Controller\LoginController\detectLoginProvider
‪string detectLoginProvider(ServerRequestInterface $request)
Definition: LoginController.php:554
‪TYPO3\CMS\Core\Utility\HttpUtility\redirect
‪static redirect($url, $httpStatus=self::HTTP_STATUS_303)
Definition: HttpUtility.php:103
‪TYPO3\CMS\Backend\Controller\LoginController
Definition: LoginController.php:49
‪TYPO3\CMS\Backend\Controller
Definition: AbstractFormEngineAjaxController.php:3
‪TYPO3\CMS\Backend\Controller\LoginController\checkRedirect
‪checkRedirect(ServerRequestInterface $request)
Definition: LoginController.php:308
‪TYPO3\CMS\Core\Http\NormalizedParams
Definition: NormalizedParams.php:32
‪TYPO3\CMS\Backend\Utility\BackendUtility\TYPO3_copyRightNotice
‪static string TYPO3_copyRightNotice()
Definition: BackendUtility.php:4370
‪TYPO3\CMS\Core\Http\HtmlResponse
Definition: HtmlResponse.php:25
‪TYPO3\CMS\Fluid\View\AbstractTemplateView\setTemplateRootPaths
‪setTemplateRootPaths(array $templateRootPaths)
Definition: AbstractTemplateView.php:111