‪TYPO3CMS  11.5
LoginProviderResolver.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 
20 use Psr\Http\Message\ServerRequestInterface;
21 
37 {
38  protected array ‪$loginProviders = [];
39 
40  public function ‪__construct(array ‪$loginProviders = null)
41  {
42  if (‪$loginProviders === null) {
43  ‪$loginProviders = ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] ?? [];
44  if (!is_array(‪$loginProviders)) {
45  ‪$loginProviders = [];
46  }
47  }
48 
49  $this->loginProviders = $this->‪validateAndSortLoginProviders($loginProviders);
50  }
51 
59  protected function ‪validateAndSortLoginProviders(array $providers): array
60  {
61  if (empty($providers)) {
62  throw new \RuntimeException('No login providers are registered in $GLOBALS[\'TYPO3_CONF_VARS\'][\'EXTCONF\'][\'backend\'][\'loginProviders\'].', 1433417281);
63  }
64  foreach ($providers as $identifier => $configuration) {
65  if (empty($configuration) || !is_array($configuration)) {
66  throw new \RuntimeException('Missing configuration for login provider "' . $identifier . '".', 1433416043);
67  }
68  if (!is_string($configuration['provider']) || empty($configuration['provider']) || !class_exists($configuration['provider']) || !is_subclass_of($configuration['provider'], LoginProviderInterface::class)) {
69  throw new \RuntimeException('The login provider "' . $identifier . '" defines an invalid provider. Ensure the class exists and implements the "' . LoginProviderInterface::class . '".', 1460977275);
70  }
71  if (empty($configuration['label'])) {
72  throw new \RuntimeException('Missing label definition for login provider "' . $identifier . '".', 1433416044);
73  }
74  if (empty($configuration['icon-class']) && empty($configuration['iconIdentifier'])) {
75  throw new \RuntimeException('Missing icon definition for login provider "' . $identifier . '".', 1433416045);
76  }
77  if (!isset($configuration['sorting'])) {
78  throw new \RuntimeException('Missing sorting definition for login provider "' . $identifier . '".', 1433416046);
79  }
80  }
81  // sort providers
82  uasort($providers, static function ($a, $b) {
83  return $b['sorting'] - $a['sorting'];
84  });
85  return $providers;
86  }
87 
92  public function ‪getLoginProviders(): array
93  {
95  }
96 
104  public function ‪hasLoginProvider(string $identifier): bool
105  {
106  return isset($this->loginProviders[$identifier]);
107  }
108 
109  public function ‪getLoginProviderConfigurationByIdentifier(string $identifier): array
110  {
111  return $this->loginProviders[$identifier] ?? [];
112  }
113 
118  public function ‪getPrimaryLoginProviderIdentifier(): string
119  {
120  reset($this->loginProviders);
121  return (string)key($this->loginProviders);
122  }
123 
132  public function ‪resolveLoginProviderIdentifierFromRequest(ServerRequestInterface $request, string $cookieName): string
133  {
134  $loginProvider = (string)($request->getParsedBody()['loginProvider'] ?? $request->getQueryParams()['loginProvider'] ?? '');
135  if ((empty($loginProvider) || !$this->‪hasLoginProvider($loginProvider)) && !empty($request->getCookieParams()[$cookieName] ?? null)) {
136  $loginProvider = $request->getCookieParams()[$cookieName];
137  }
138  if (empty($loginProvider) || !$this->‪hasLoginProvider($loginProvider)) {
139  $loginProvider = $this->‪getPrimaryLoginProviderIdentifier();
140  }
141  return (string)$loginProvider;
142  }
143 }
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\hasLoginProvider
‪bool hasLoginProvider(string $identifier)
Definition: LoginProviderResolver.php:104
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\getPrimaryLoginProviderIdentifier
‪string getPrimaryLoginProviderIdentifier()
Definition: LoginProviderResolver.php:118
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\__construct
‪__construct(array $loginProviders=null)
Definition: LoginProviderResolver.php:40
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\$loginProviders
‪array $loginProviders
Definition: LoginProviderResolver.php:38
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver
Definition: LoginProviderResolver.php:37
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\resolveLoginProviderIdentifierFromRequest
‪string resolveLoginProviderIdentifierFromRequest(ServerRequestInterface $request, string $cookieName)
Definition: LoginProviderResolver.php:132
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\getLoginProviderConfigurationByIdentifier
‪getLoginProviderConfigurationByIdentifier(string $identifier)
Definition: LoginProviderResolver.php:109
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\validateAndSortLoginProviders
‪array validateAndSortLoginProviders(array $providers)
Definition: LoginProviderResolver.php:59
‪TYPO3\CMS\Backend\LoginProvider
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver\getLoginProviders
‪array getLoginProviders()
Definition: LoginProviderResolver.php:92