‪TYPO3CMS  11.5
MfaConfigurationController.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\ResponseInterface;
21 use Psr\Http\Message\ServerRequestInterface;
22 use Psr\Http\Message\UriInterface;
39 
46 {
47  protected array ‪$allowedActions = ['overview', 'setup', 'activate', 'deactivate', 'unlock', 'edit', 'save'];
48  private array ‪$providerActionsWhenInactive = ['setup', 'activate'];
49  private array ‪$providerActionsWhenActive = ['deactivate', 'unlock', 'edit', 'save'];
50 
52 
53  public function ‪__construct(
58  ) {
59  $this->iconFactory = ‪$iconFactory;
61  }
62 
67  public function ‪handleRequest(ServerRequestInterface $request): ResponseInterface
68  {
69  $this->moduleTemplate = $this->moduleTemplateFactory->create($request);
70  $action = (string)($request->getQueryParams()['action'] ?? $request->getParsedBody()['action'] ?? 'overview');
71 
72  if (!$this->‪isActionAllowed($action)) {
73  return new ‪HtmlResponse('Action not allowed', 400);
74  }
75 
76  $mfaProvider = null;
77  $identifier = (string)($request->getQueryParams()['identifier'] ?? $request->getParsedBody()['identifier'] ?? '');
78  // Check if given identifier is valid
79  if ($this->‪isValidIdentifier($identifier)) {
80  $mfaProvider = $this->mfaProviderRegistry->getProvider($identifier);
81  }
82  // All actions expect "overview" require a provider to deal with.
83  // If non is found at this point, initiate a redirect to the overview.
84  if ($mfaProvider === null && $action !== 'overview') {
85  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerNotFound'), '', ‪FlashMessage::ERROR);
86  return new ‪RedirectResponse($this->‪getActionUri('overview'));
87  }
88  // If a valid provider is given, check if the requested action can be performed on this provider
89  if ($mfaProvider !== null) {
90  $isProviderActive = $mfaProvider->isActive(
92  );
93  // Some actions require the provider to be inactive
94  if ($isProviderActive && in_array($action, $this->providerActionsWhenInactive, true)) {
95  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerActive'), '', ‪FlashMessage::ERROR);
96  return new ‪RedirectResponse($this->‪getActionUri('overview'));
97  }
98  // Some actions require the provider to be active
99  if (!$isProviderActive && in_array($action, $this->providerActionsWhenActive, true)) {
100  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerNotActive'), '', ‪FlashMessage::ERROR);
101  return new ‪RedirectResponse($this->‪getActionUri('overview'));
102  }
103  }
104 
105  switch ($action) {
106  case 'overview':
107  return $this->‪overviewAction($request, $this->‪initializeView($action));
108  case 'setup':
109  case 'edit':
110  return $this->{$action . 'Action'}($request, $mfaProvider, $this->‪initializeView($action));
111  case 'activate':
112  case 'deactivate':
113  case 'unlock':
114  case 'save':
115  return $this->{$action . 'Action'}($request, $mfaProvider);
116  default:
117  return new ‪HtmlResponse('Action not allowed', 400);
118  }
119  }
120 
124  public function ‪overviewAction(ServerRequestInterface $request, ‪StandaloneView $view): ResponseInterface
125  {
126  $this->‪addOverviewButtons($request);
127  $view->‪assignMultiple([
128  'providers' => $this->allowedProviders,
129  'defaultProvider' => $this->‪getDefaultProviderIdentifier(),
130  'recommendedProvider' => $this->‪getRecommendedProviderIdentifier(),
131  'setupRequired' => $this->mfaRequired && !$this->mfaProviderRegistry->hasActiveProviders($this->getBackendUser()),
132  ]);
133  $this->moduleTemplate->setContent($view->‪render());
134  return new ‪HtmlResponse($this->moduleTemplate->renderContent());
135  }
136 
140  public function ‪setupAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider, ‪StandaloneView $view): ResponseInterface
141  {
142  $this->‪addFormButtons();
143  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
144  $providerResponse = $mfaProvider->‪handleRequest($request, $propertyManager, ‪MfaViewType::SETUP);
145  $view->‪assignMultiple([
146  'provider' => $mfaProvider,
147  'providerContent' => $providerResponse->getBody(),
148  ]);
149  $this->moduleTemplate->setContent($view->‪render());
150  return new ‪HtmlResponse($this->moduleTemplate->renderContent());
151  }
152 
162  public function ‪activateAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
163  {
164  $backendUser = $this->‪getBackendUser();
165  $isRecommendedProvider = $this->‪getRecommendedProviderIdentifier() === $mfaProvider->‪getIdentifier();
166  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $backendUser);
167  $languageService = $this->‪getLanguageService();
168  // Check whether activation operation was successful and the provider is now active.
169  if (!$mfaProvider->‪activate($request, $propertyManager) || !$mfaProvider->‪isActive($propertyManager)) {
170  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:activate.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::ERROR);
171  return new ‪RedirectResponse($this->‪getActionUri('setup', ['identifier' => $mfaProvider->‪getIdentifier()]));
172  }
173  if ($isRecommendedProvider
174  || (
175  $this->‪getDefaultProviderIdentifier() === ''
176  && $mfaProvider->‪isDefaultProviderAllowed()
177  && !$this->hasSuitableDefaultProviders([$mfaProvider->‪getIdentifier()])
178  )
179  ) {
180  $this->‪setDefaultProvider($mfaProvider);
181  }
182  // If this is the first activated provider, the user has logged in without being required
183  // to pass the MFA challenge. Therefore no session entry exists. To prevent the challenge
184  // from showing up after the activation we need to set the session data here.
185  if (!(bool)($backendUser->getSessionData('mfa') ?? false)) {
186  $backendUser->setSessionData('mfa', true);
187  }
188  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:activate.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::OK);
189  return new ‪RedirectResponse($this->‪getActionUri('overview'));
190  }
191 
197  public function ‪deactivateAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
198  {
199  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
200  $languageService = $this->‪getLanguageService();
201  if (!$mfaProvider->‪deactivate($request, $propertyManager)) {
202  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:deactivate.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::ERROR);
203  } else {
204  if ($this->‪isDefaultProvider($mfaProvider)) {
205  $this->‪removeDefaultProvider();
206  }
207  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:deactivate.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::OK);
208  }
209  return new ‪RedirectResponse($this->‪getActionUri('overview'));
210  }
211 
215  public function ‪unlockAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
216  {
217  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
218  $languageService = $this->‪getLanguageService();
219  if (!$mfaProvider->‪unlock($request, $propertyManager)) {
220  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:unlock.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::ERROR);
221  } else {
222  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:unlock.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::OK);
223  }
224  return new ‪RedirectResponse($this->‪getActionUri('overview'));
225  }
226 
230  public function ‪editAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider, ‪StandaloneView $view): ResponseInterface
231  {
232  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
233  if ($mfaProvider->‪isLocked($propertyManager)) {
234  // Do not show edit view for locked providers
235  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerIsLocked'), '', ‪FlashMessage::ERROR);
236  return new ‪RedirectResponse($this->‪getActionUri('overview'));
237  }
238  $this->‪addFormButtons();
239  $providerResponse = $mfaProvider->‪handleRequest($request, $propertyManager, ‪MfaViewType::EDIT);
240  $view->‪assignMultiple([
241  'provider' => $mfaProvider,
242  'providerContent' => $providerResponse->getBody(),
243  'isDefaultProvider' => $this->isDefaultProvider($mfaProvider),
244  ]);
245  $this->moduleTemplate->setContent($view->‪render());
246  return new ‪HtmlResponse($this->moduleTemplate->renderContent());
247  }
248 
253  public function ‪saveAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
254  {
255  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
256  $languageService = $this->‪getLanguageService();
257  if (!$mfaProvider->‪update($request, $propertyManager)) {
258  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:save.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::ERROR);
259  } else {
260  if ((bool)($request->getParsedBody()['defaultProvider'] ?? false)) {
261  $this->‪setDefaultProvider($mfaProvider);
262  } elseif ($this->‪isDefaultProvider($mfaProvider)) {
263  $this->‪removeDefaultProvider();
264  }
265  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:save.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ‪FlashMessage::OK);
266  }
267  if (!$mfaProvider->‪isActive($propertyManager)) {
268  return new ‪RedirectResponse($this->‪getActionUri('overview'));
269  }
270  return new ‪RedirectResponse($this->‪getActionUri('edit', ['identifier' => $mfaProvider->‪getIdentifier()]));
271  }
272 
276  protected function ‪initializeView(string $templateName): ‪StandaloneView
277  {
278  $view = GeneralUtility::makeInstance(StandaloneView::class);
279  $view->setTemplateRootPaths(['EXT:backend/Resources/Private/Templates/Mfa']);
280  $view->setPartialRootPaths(['EXT:backend/Resources/Private/Partials']);
281  $view->setLayoutRootPaths(['EXT:backend/Resources/Private/Layouts']);
282  $view->setTemplate($templateName);
283  return $view;
284  }
285 
290  protected function ‪getActionUri(string $action, array $additionalParameters = []): UriInterface
291  {
292  if (!$this->‪isActionAllowed($action)) {
293  $action = 'overview';
294  }
295  return $this->uriBuilder->buildUriFromRoute('mfa', array_merge(['action' => $action], $additionalParameters));
296  }
297 
301  protected function ‪hasSuitableDefaultProviders(array $excludedProviders = []): bool
302  {
303  foreach ($this->allowedProviders as $identifier => $provider) {
304  if (!in_array($identifier, $excludedProviders, true)
305  && $provider->isDefaultProviderAllowed()
306  && $provider->isActive(‪MfaProviderPropertyManager::create($provider, $this->getBackendUser()))
307  ) {
308  return true;
309  }
310  }
311  return false;
312  }
313 
317  protected function ‪getDefaultProviderIdentifier(): string
318  {
319  $defaultProviderIdentifier = (string)($this->‪getBackendUser()->uc['mfa']['defaultProvider'] ?? '');
320  // The default provider value is only valid, if the corresponding provider exist and is allowed
321  if ($this->‪isValidIdentifier($defaultProviderIdentifier)) {
322  $defaultProvider = $this->mfaProviderRegistry->getProvider($defaultProviderIdentifier);
323  $propertyManager = ‪MfaProviderPropertyManager::create($defaultProvider, $this->‪getBackendUser());
324  // Also check if the provider is activated for the user
325  if ($defaultProvider->isActive($propertyManager)) {
326  return $defaultProviderIdentifier;
327  }
328  }
329 
330  // If the stored provider is not valid, clean up the UC
331  $this->‪removeDefaultProvider();
332  return '';
333  }
334 
338  protected function ‪getRecommendedProviderIdentifier(): string
339  {
340  $recommendedProvider = $this->‪getRecommendedProvider();
341  if ($recommendedProvider === null) {
342  return '';
343  }
344 
345  $propertyManager = ‪MfaProviderPropertyManager::create($recommendedProvider, $this->‪getBackendUser());
346  // If the defined recommended provider is valid, check if it is not yet activated
347  return !$recommendedProvider->isActive($propertyManager) ? $recommendedProvider->getIdentifier() : '';
348  }
349 
350  protected function ‪isDefaultProvider(‪MfaProviderManifestInterface $mfaProvider): bool
351  {
352  return $this->‪getDefaultProviderIdentifier() === $mfaProvider->‪getIdentifier();
353  }
354 
355  protected function ‪setDefaultProvider(‪MfaProviderManifestInterface $mfaProvider): void
356  {
357  $this->‪getBackendUser()->uc['mfa']['defaultProvider'] = $mfaProvider->‪getIdentifier();
358  $this->‪getBackendUser()->writeUC();
359  }
360 
361  protected function ‪removeDefaultProvider(): void
362  {
363  $this->‪getBackendUser()->uc['mfa']['defaultProvider'] = '';
364  $this->‪getBackendUser()->writeUC();
365  }
366 
367  protected function ‪addFlashMessage(string $message, string $title = '', int $severity = ‪FlashMessage::INFO): void
368  {
369  $flashMessage = GeneralUtility::makeInstance(FlashMessage::class, $message, $title, $severity, true);
370  $flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class);
371  $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
372  $defaultFlashMessageQueue->enqueue($flashMessage);
373  }
374 
375  protected function ‪addOverviewButtons(ServerRequestInterface $request): void
376  {
377  $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
378 
379  if (($returnUrl = $this->‪getReturnUrl($request)) !== '') {
380  $button = $buttonBar
381  ->makeLinkButton()
382  ->setHref($returnUrl)
383  ->setIcon($this->iconFactory->getIcon('actions-view-go-back', ‪Icon::SIZE_SMALL))
384  ->setTitle($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.goBack'))
385  ->setShowLabelText(true);
386  $buttonBar->addButton($button);
387  }
388 
389  $reloadButton = $buttonBar
390  ->makeLinkButton()
391  ->setHref($request->getAttribute('normalizedParams')->getRequestUri())
392  ->setTitle($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.reload'))
393  ->setIcon($this->iconFactory->getIcon('actions-refresh', ‪Icon::SIZE_SMALL));
394  $buttonBar->addButton($reloadButton, ‪ButtonBar::BUTTON_POSITION_RIGHT);
395  }
396 
397  protected function ‪addFormButtons(): void
398  {
399  $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
400  $lang = $this->‪getLanguageService();
401 
402  $closeButton = $buttonBar
403  ->makeLinkButton()
404  ->setHref((string)$this->uriBuilder->buildUriFromRoute('mfa', ['action' => 'overview']))
405  ->setClasses('t3js-editform-close')
406  ->setTitle($lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:rm.closeDoc'))
407  ->setShowLabelText(true)
408  ->setIcon($this->iconFactory->getIcon('actions-close', ‪Icon::SIZE_SMALL));
409  $buttonBar->addButton($closeButton);
410 
411  $saveButton = $buttonBar
412  ->makeInputButton()
413  ->setTitle($lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:rm.saveDoc'))
414  ->setName('save')
415  ->setValue('1')
416  ->setShowLabelText(true)
417  ->setForm('mfaConfigurationController')
418  ->setIcon($this->iconFactory->getIcon('actions-document-save', ‪Icon::SIZE_SMALL));
419  $buttonBar->addButton($saveButton, ‪ButtonBar::BUTTON_POSITION_LEFT, 2);
420  }
421 
422  protected function ‪getReturnUrl(ServerRequestInterface $request): string
423  {
424  $returnUrl = GeneralUtility::sanitizeLocalUrl(
425  $request->getQueryParams()['returnUrl'] ?? $request->getParsedBody()['returnUrl'] ?? ''
426  );
427 
428  if ($returnUrl === '' && ‪ExtensionManagementUtility::isLoaded('setup')) {
429  $returnUrl = (string)$this->uriBuilder->buildUriFromRoute('user_setup');
430  }
431 
432  return $returnUrl;
433  }
434 }
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\hasSuitableDefaultProviders
‪hasSuitableDefaultProviders(array $excludedProviders=[])
Definition: MfaConfigurationController.php:301
‪TYPO3\CMS\Core\Imaging\Icon\SIZE_SMALL
‪const SIZE_SMALL
Definition: Icon.php:30
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\isValidIdentifier
‪isValidIdentifier(string $identifier)
Definition: AbstractMfaController.php:76
‪TYPO3\CMS\Core\Authentication\Mfa\MfaViewType\EDIT
‪const EDIT
Definition: MfaViewType.php:28
‪TYPO3\CMS\Backend\Template\Components\ButtonBar\BUTTON_POSITION_LEFT
‪const BUTTON_POSITION_LEFT
Definition: ButtonBar.php:36
‪TYPO3\CMS\Backend\Template\Components\ButtonBar
Definition: ButtonBar.php:32
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\getBackendUser
‪getBackendUser()
Definition: AbstractMfaController.php:122
‪TYPO3\CMS\Core\Imaging\Icon
Definition: Icon.php:26
‪TYPO3\CMS\Backend\Template\ModuleTemplateFactory
Definition: ModuleTemplateFactory.php:29
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface\getIdentifier
‪string getIdentifier()
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getActionUri
‪getActionUri(string $action, array $additionalParameters=[])
Definition: MfaConfigurationController.php:290
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$iconFactory
‪IconFactory $iconFactory
Definition: MfaConfigurationController.php:51
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\activate
‪bool activate(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\$moduleTemplateFactory
‪ModuleTemplateFactory $moduleTemplateFactory
Definition: AbstractMfaController.php:40
‪TYPO3\CMS\Core\Authentication\Mfa\MfaViewType\SETUP
‪const SETUP
Definition: MfaViewType.php:27
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\getLanguageService
‪getLanguageService()
Definition: AbstractMfaController.php:127
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\activateAction
‪activateAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:162
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface
Definition: MfaProviderManifestInterface.php:26
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\isActive
‪bool isActive(MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\initializeView
‪initializeView(string $templateName)
Definition: MfaConfigurationController.php:276
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getReturnUrl
‪getReturnUrl(ServerRequestInterface $request)
Definition: MfaConfigurationController.php:422
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\$mfaProviderRegistry
‪MfaProviderRegistry $mfaProviderRegistry
Definition: AbstractMfaController.php:39
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\setDefaultProvider
‪setDefaultProvider(MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:355
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\deactivate
‪bool deactivate(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getDefaultProviderIdentifier
‪getDefaultProviderIdentifier()
Definition: MfaConfigurationController.php:317
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\saveAction
‪saveAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:253
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\unlock
‪bool unlock(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\addFormButtons
‪addFormButtons()
Definition: MfaConfigurationController.php:397
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\getRecommendedProvider
‪getRecommendedProvider()
Definition: AbstractMfaController.php:102
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\deactivateAction
‪deactivateAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:197
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:40
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\isActionAllowed
‪isActionAllowed(string $action)
Definition: AbstractMfaController.php:66
‪TYPO3\CMS\Extbase\Mvc\View\ViewInterface\assignMultiple
‪self assignMultiple(array $values)
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\unlockAction
‪unlockAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:215
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\setupAction
‪setupAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider, StandaloneView $view)
Definition: MfaConfigurationController.php:140
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderPropertyManager
Definition: MfaProviderPropertyManager.php:33
‪TYPO3\CMS\Core\Http\RedirectResponse
Definition: RedirectResponse.php:28
‪TYPO3\CMS\Core\Messaging\AbstractMessage\OK
‪const OK
Definition: AbstractMessage.php:29
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\removeDefaultProvider
‪removeDefaultProvider()
Definition: MfaConfigurationController.php:361
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\addFlashMessage
‪addFlashMessage(string $message, string $title='', int $severity=FlashMessage::INFO)
Definition: MfaConfigurationController.php:367
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\update
‪bool update(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Core\Messaging\AbstractMessage\INFO
‪const INFO
Definition: AbstractMessage.php:28
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:26
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\__construct
‪__construct(IconFactory $iconFactory, UriBuilder $uriBuilder, MfaProviderRegistry $mfaProviderRegistry, ModuleTemplateFactory $moduleTemplateFactory)
Definition: MfaConfigurationController.php:53
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface\isDefaultProviderAllowed
‪bool isDefaultProviderAllowed()
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$allowedActions
‪array $allowedActions
Definition: MfaConfigurationController.php:47
‪TYPO3\CMS\Core\Authentication\Mfa\MfaViewType
Definition: MfaViewType.php:26
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderPropertyManager\create
‪static MfaProviderPropertyManager create(MfaProviderManifestInterface $provider, AbstractUserAuthentication $user)
Definition: MfaProviderPropertyManager.php:224
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\overviewAction
‪overviewAction(ServerRequestInterface $request, StandaloneView $view)
Definition: MfaConfigurationController.php:124
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\editAction
‪editAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider, StandaloneView $view)
Definition: MfaConfigurationController.php:230
‪TYPO3\CMS\Extbase\Mvc\View\ViewInterface\render
‪string render()
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\handleRequest
‪ResponseInterface handleRequest(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager, string $type)
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\addOverviewButtons
‪addOverviewButtons(ServerRequestInterface $request)
Definition: MfaConfigurationController.php:375
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\isLocked
‪bool isLocked(MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$providerActionsWhenActive
‪array $providerActionsWhenActive
Definition: MfaConfigurationController.php:49
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\handleRequest
‪handleRequest(ServerRequestInterface $request)
Definition: MfaConfigurationController.php:67
‪TYPO3\CMS\Backend\Template\Components\ButtonBar\BUTTON_POSITION_RIGHT
‪const BUTTON_POSITION_RIGHT
Definition: ButtonBar.php:41
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getRecommendedProviderIdentifier
‪getRecommendedProviderIdentifier()
Definition: MfaConfigurationController.php:338
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\isLoaded
‪static bool isLoaded($key)
Definition: ExtensionManagementUtility.php:114
‪TYPO3\CMS\Backend\Controller
Definition: AboutController.php:16
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController
Definition: MfaConfigurationController.php:46
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$providerActionsWhenInactive
‪array $providerActionsWhenInactive
Definition: MfaConfigurationController.php:48
‪TYPO3\CMS\Core\Messaging\FlashMessageService
Definition: FlashMessageService.php:27
‪TYPO3\CMS\Core\Messaging\AbstractMessage\ERROR
‪const ERROR
Definition: AbstractMessage.php:31
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\$uriBuilder
‪UriBuilder $uriBuilder
Definition: AbstractMfaController.php:38
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface\getTitle
‪string getTitle()
‪TYPO3\CMS\Core\Http\HtmlResponse
Definition: HtmlResponse.php:26
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\isDefaultProvider
‪isDefaultProvider(MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:350
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderRegistry
Definition: MfaProviderRegistry.php:28
‪TYPO3\CMS\Backend\Controller\AbstractMfaController
Definition: AbstractMfaController.php:37