‪TYPO3CMS  ‪main
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;
34 use TYPO3\CMS\Core\Imaging\IconSize;
40 
46 #[AsController]
48 {
49  protected array ‪$allowedActions = ['overview', 'setup', 'activate', 'deactivate', 'unlock', 'edit', 'save'];
50  private array ‪$providerActionsWhenInactive = ['setup', 'activate'];
51  private array ‪$providerActionsWhenActive = ['deactivate', 'unlock', 'edit', 'save'];
53 
54  public function ‪__construct(
55  protected readonly ‪IconFactory $iconFactory,
56  protected readonly ‪UriBuilder $uriBuilder,
57  protected readonly ‪ModuleTemplateFactory $moduleTemplateFactory,
58  ) {}
59 
64  public function ‪handleRequest(ServerRequestInterface $request): ResponseInterface
65  {
67  $this->view = $this->moduleTemplateFactory->create($request);
68  $action = (string)($request->getQueryParams()['action'] ?? $request->getParsedBody()['action'] ?? 'overview');
69 
70  if (!$this->‪isActionAllowed($action)) {
71  return new ‪HtmlResponse('Action not allowed', 400);
72  }
73 
74  $mfaProvider = null;
75  ‪$identifier = (string)($request->getQueryParams()['identifier'] ?? $request->getParsedBody()['identifier'] ?? '');
76  // Check if given identifier is valid
78  $mfaProvider = $this->mfaProviderRegistry->getProvider(‪$identifier);
79  }
80  // All actions expect "overview" require a provider to deal with.
81  // If non is found at this point, initiate a redirect to the overview.
82  if ($mfaProvider === null && $action !== 'overview') {
83  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerNotFound'), '', ContextualFeedbackSeverity::ERROR);
84  return new ‪RedirectResponse($this->‪getActionUri('overview'));
85  }
86  // If a valid provider is given, check if the requested action can be performed on this provider
87  if ($mfaProvider !== null) {
88  $isProviderActive = $mfaProvider->isActive(
90  );
91  // Some actions require the provider to be inactive
92  if ($isProviderActive && in_array($action, $this->providerActionsWhenInactive, true)) {
93  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerActive'), '', ContextualFeedbackSeverity::ERROR);
94  return new ‪RedirectResponse($this->‪getActionUri('overview'));
95  }
96  // Some actions require the provider to be active
97  if (!$isProviderActive && in_array($action, $this->providerActionsWhenActive, true)) {
98  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerNotActive'), '', ContextualFeedbackSeverity::ERROR);
99  return new ‪RedirectResponse($this->‪getActionUri('overview'));
100  }
101  }
102 
103  switch ($action) {
104  case 'overview':
105  return $this->‪overviewAction($request);
106  case 'setup':
107  case 'edit':
108  case 'activate':
109  case 'deactivate':
110  case 'unlock':
111  case 'save':
112  return $this->{$action . 'Action'}($request, $mfaProvider);
113  default:
114  return new ‪HtmlResponse('Action not allowed', 400);
115  }
116  }
117 
121  protected function ‪overviewAction(ServerRequestInterface $request): ResponseInterface
122  {
123  $this->‪addOverviewButtons($request);
124  $this->view->assignMultiple([
125  'providers' => $this->allowedProviders,
126  'defaultProvider' => $this->‪getDefaultProviderIdentifier(),
127  'recommendedProvider' => $this->‪getRecommendedProviderIdentifier(),
128  'setupRequired' => $this->mfaRequired && !$this->mfaProviderRegistry->hasActiveProviders($this->getBackendUser()),
129  ]);
130  return $this->view->renderResponse('Mfa/Overview');
131  }
132 
136  protected function ‪setupAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
137  {
138  $this->‪addFormButtons();
139  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
140  $providerResponse = $mfaProvider->‪handleRequest($request, $propertyManager, MfaViewType::SETUP);
141  $this->view->assignMultiple([
142  'provider' => $mfaProvider,
143  'providerContent' => $providerResponse->getBody(),
144  ]);
145  return $this->view->renderResponse('Mfa/Setup');
146  }
147 
157  protected function ‪activateAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
158  {
159  $backendUser = $this->‪getBackendUser();
160  $isRecommendedProvider = $this->‪getRecommendedProviderIdentifier() === $mfaProvider->‪getIdentifier();
161  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $backendUser);
162  $languageService = $this->‪getLanguageService();
163  // Check whether activation operation was successful and the provider is now active.
164  if (!$mfaProvider->‪activate($request, $propertyManager) || !$mfaProvider->‪isActive($propertyManager)) {
165  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:activate.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::ERROR);
166  return new ‪RedirectResponse($this->‪getActionUri('setup', ['identifier' => $mfaProvider->‪getIdentifier()]));
167  }
168  if ($isRecommendedProvider
169  || (
170  $this->‪getDefaultProviderIdentifier() === ''
171  && $mfaProvider->‪isDefaultProviderAllowed()
172  && !$this->hasSuitableDefaultProviders([$mfaProvider->‪getIdentifier()])
173  )
174  ) {
175  $this->‪setDefaultProvider($mfaProvider);
176  }
177  // If this is the first activated provider, the user has logged in without being required
178  // to pass the MFA challenge. Therefore, no session entry exists. To prevent the challenge
179  // from showing up after the activation we need to set the session data here.
180  if (!(bool)($backendUser->getSessionData('mfa') ?? false)) {
181  $backendUser->setSessionData('mfa', true);
182  }
183  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:activate.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::OK);
184  return new ‪RedirectResponse($this->‪getActionUri('overview'));
185  }
186 
192  protected function ‪deactivateAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
193  {
194  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
195  $languageService = $this->‪getLanguageService();
196  if (!$mfaProvider->‪deactivate($request, $propertyManager)) {
197  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:deactivate.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::ERROR);
198  } else {
199  if ($this->‪isDefaultProvider($mfaProvider)) {
200  $this->‪removeDefaultProvider();
201  }
202  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:deactivate.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::OK);
203  }
204  return new ‪RedirectResponse($this->‪getActionUri('overview'));
205  }
206 
210  protected function ‪unlockAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
211  {
212  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
213  $languageService = $this->‪getLanguageService();
214  if (!$mfaProvider->‪unlock($request, $propertyManager)) {
215  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:unlock.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::ERROR);
216  } else {
217  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:unlock.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::OK);
218  }
219  return new ‪RedirectResponse($this->‪getActionUri('overview'));
220  }
221 
225  protected function ‪editAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
226  {
227  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
228  if ($mfaProvider->‪isLocked($propertyManager)) {
229  // Do not show edit view for locked providers
230  $this->‪addFlashMessage($this->‪getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:providerIsLocked'), '', ContextualFeedbackSeverity::ERROR);
231  return new ‪RedirectResponse($this->‪getActionUri('overview'));
232  }
233  $this->‪addFormButtons();
234  $providerResponse = $mfaProvider->‪handleRequest($request, $propertyManager, MfaViewType::EDIT);
235  $this->view->assignMultiple([
236  'provider' => $mfaProvider,
237  'providerContent' => $providerResponse->getBody(),
238  'isDefaultProvider' => $this->isDefaultProvider($mfaProvider),
239  ]);
240  return $this->view->renderResponse('Mfa/Edit');
241  }
242 
247  protected function ‪saveAction(ServerRequestInterface $request, ‪MfaProviderManifestInterface $mfaProvider): ResponseInterface
248  {
249  $propertyManager = ‪MfaProviderPropertyManager::create($mfaProvider, $this->‪getBackendUser());
250  $languageService = $this->‪getLanguageService();
251  if (!$mfaProvider->‪update($request, $propertyManager)) {
252  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:save.failure'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::ERROR);
253  } else {
254  if ($request->getParsedBody()['defaultProvider'] ?? false) {
255  $this->‪setDefaultProvider($mfaProvider);
256  } elseif ($this->‪isDefaultProvider($mfaProvider)) {
257  $this->‪removeDefaultProvider();
258  }
259  $this->‪addFlashMessage(sprintf($languageService->sL('LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:save.success'), $languageService->sL($mfaProvider->‪getTitle())), '', ContextualFeedbackSeverity::OK);
260  }
261  if (!$mfaProvider->‪isActive($propertyManager)) {
262  return new ‪RedirectResponse($this->‪getActionUri('overview'));
263  }
264  return new ‪RedirectResponse($this->‪getActionUri('edit', ['identifier' => $mfaProvider->‪getIdentifier()]));
265  }
266 
271  protected function ‪getActionUri(string $action, array $additionalParameters = []): UriInterface
272  {
273  if (!$this->‪isActionAllowed($action)) {
274  $action = 'overview';
275  }
276  return $this->uriBuilder->buildUriFromRoute('mfa', array_merge(['action' => $action], $additionalParameters));
277  }
278 
282  protected function ‪hasSuitableDefaultProviders(array $excludedProviders = []): bool
283  {
284  foreach ($this->allowedProviders as ‪$identifier => $provider) {
285  if (!in_array(‪$identifier, $excludedProviders, true)
286  && $provider->isDefaultProviderAllowed()
287  && $provider->isActive(‪MfaProviderPropertyManager::create($provider, $this->getBackendUser()))
288  ) {
289  return true;
290  }
291  }
292  return false;
293  }
294 
298  protected function ‪getDefaultProviderIdentifier(): string
299  {
300  $defaultProviderIdentifier = (string)($this->‪getBackendUser()->uc['mfa']['defaultProvider'] ?? '');
301  // The default provider value is only valid, if the corresponding provider exist and is allowed
302  if ($this->‪isValidIdentifier($defaultProviderIdentifier)) {
303  $defaultProvider = $this->mfaProviderRegistry->getProvider($defaultProviderIdentifier);
304  $propertyManager = ‪MfaProviderPropertyManager::create($defaultProvider, $this->‪getBackendUser());
305  // Also check if the provider is activated for the user
306  if ($defaultProvider->isActive($propertyManager)) {
307  return $defaultProviderIdentifier;
308  }
309  }
310 
311  // If the stored provider is not valid, clean up the UC
312  $this->‪removeDefaultProvider();
313  return '';
314  }
315 
319  protected function ‪getRecommendedProviderIdentifier(): string
320  {
321  $recommendedProvider = $this->‪getRecommendedProvider();
322  if ($recommendedProvider === null) {
323  return '';
324  }
325 
326  $propertyManager = ‪MfaProviderPropertyManager::create($recommendedProvider, $this->‪getBackendUser());
327  // If the defined recommended provider is valid, check if it is not yet activated
328  return !$recommendedProvider->isActive($propertyManager) ? $recommendedProvider->getIdentifier() : '';
329  }
330 
331  protected function ‪isDefaultProvider(‪MfaProviderManifestInterface $mfaProvider): bool
332  {
333  return $this->‪getDefaultProviderIdentifier() === $mfaProvider->‪getIdentifier();
334  }
335 
336  protected function ‪setDefaultProvider(‪MfaProviderManifestInterface $mfaProvider): void
337  {
338  $this->‪getBackendUser()->uc['mfa']['defaultProvider'] = $mfaProvider->‪getIdentifier();
339  $this->‪getBackendUser()->writeUC();
340  }
341 
342  protected function ‪removeDefaultProvider(): void
343  {
344  $this->‪getBackendUser()->uc['mfa']['defaultProvider'] = '';
345  $this->‪getBackendUser()->writeUC();
346  }
347 
348  protected function ‪addFlashMessage(string $message, string $title = '', ‪ContextualFeedbackSeverity $severity = ContextualFeedbackSeverity::INFO): void
349  {
350  $flashMessage = GeneralUtility::makeInstance(FlashMessage::class, $message, $title, $severity, true);
351  $flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class);
352  $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
353  $defaultFlashMessageQueue->enqueue($flashMessage);
354  }
355 
356  protected function ‪addOverviewButtons(ServerRequestInterface $request): void
357  {
358  $buttonBar = $this->view->getDocHeaderComponent()->getButtonBar();
359 
360  if (($returnUrl = $this->‪getReturnUrl($request)) !== '') {
361  $button = $buttonBar
362  ->makeLinkButton()
363  ->setHref($returnUrl)
364  ->setIcon($this->iconFactory->getIcon('actions-view-go-back', IconSize::SMALL))
365  ->setTitle($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.goBack'))
366  ->setShowLabelText(true);
367  $buttonBar->addButton($button);
368  }
369 
370  $reloadButton = $buttonBar
371  ->makeLinkButton()
372  ->setHref($request->getAttribute('normalizedParams')->getRequestUri())
373  ->setTitle($this->‪getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.reload'))
374  ->setIcon($this->iconFactory->getIcon('actions-refresh', IconSize::SMALL));
375  $buttonBar->addButton($reloadButton, ‪ButtonBar::BUTTON_POSITION_RIGHT);
376  }
377 
378  protected function ‪addFormButtons(): void
379  {
380  $buttonBar = $this->view->getDocHeaderComponent()->getButtonBar();
381  $lang = $this->‪getLanguageService();
382 
383  $closeButton = $buttonBar
384  ->makeLinkButton()
385  ->setHref((string)$this->uriBuilder->buildUriFromRoute('mfa', ['action' => 'overview']))
386  ->setClasses('t3js-editform-close')
387  ->setTitle($lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:rm.closeDoc'))
388  ->setShowLabelText(true)
389  ->setIcon($this->iconFactory->getIcon('actions-close', IconSize::SMALL));
390  $buttonBar->addButton($closeButton);
391 
392  $saveButton = $buttonBar
393  ->makeInputButton()
394  ->setTitle($lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:rm.saveDoc'))
395  ->setName('save')
396  ->setValue('1')
397  ->setShowLabelText(true)
398  ->setForm('mfaConfigurationController')
399  ->setIcon($this->iconFactory->getIcon('actions-document-save', IconSize::SMALL));
400  $buttonBar->addButton($saveButton, ‪ButtonBar::BUTTON_POSITION_LEFT, 2);
401  }
402 
403  protected function ‪getReturnUrl(ServerRequestInterface $request): string
404  {
405  $returnUrl = GeneralUtility::sanitizeLocalUrl(
406  $request->getQueryParams()['returnUrl'] ?? $request->getParsedBody()['returnUrl'] ?? ''
407  );
408 
409  if ($returnUrl === '' && ‪ExtensionManagementUtility::isLoaded('setup')) {
410  $returnUrl = (string)$this->uriBuilder->buildUriFromRoute('user_setup');
411  }
412 
413  return $returnUrl;
414  }
415 }
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\hasSuitableDefaultProviders
‪hasSuitableDefaultProviders(array $excludedProviders=[])
Definition: MfaConfigurationController.php:282
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\isValidIdentifier
‪isValidIdentifier(string $identifier)
Definition: AbstractMfaController.php:61
‪TYPO3\CMS\Backend\Template\Components\ButtonBar\BUTTON_POSITION_LEFT
‪const BUTTON_POSITION_LEFT
Definition: ButtonBar.php:37
‪TYPO3\CMS\Backend\Template\Components\ButtonBar
Definition: ButtonBar.php:33
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\getBackendUser
‪getBackendUser()
Definition: AbstractMfaController.php:106
‪TYPO3\CMS\Backend\Template\ModuleTemplateFactory
Definition: ModuleTemplateFactory.php:35
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\__construct
‪__construct(protected readonly IconFactory $iconFactory, protected readonly UriBuilder $uriBuilder, protected readonly ModuleTemplateFactory $moduleTemplateFactory,)
Definition: MfaConfigurationController.php:54
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getActionUri
‪getActionUri(string $action, array $additionalParameters=[])
Definition: MfaConfigurationController.php:271
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\handleRequest
‪handleRequest(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager, MfaViewType $type)
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\activate
‪bool activate(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\getLanguageService
‪getLanguageService()
Definition: AbstractMfaController.php:111
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\activateAction
‪activateAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:157
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface
Definition: MfaProviderManifestInterface.php:26
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:35
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getReturnUrl
‪getReturnUrl(ServerRequestInterface $request)
Definition: MfaConfigurationController.php:403
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\setDefaultProvider
‪setDefaultProvider(MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:336
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\deactivate
‪bool deactivate(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Template\ModuleTemplate
Definition: ModuleTemplate.php:46
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\isLoaded
‪static isLoaded(string $key)
Definition: ExtensionManagementUtility.php:55
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getDefaultProviderIdentifier
‪getDefaultProviderIdentifier()
Definition: MfaConfigurationController.php:298
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\addFlashMessage
‪addFlashMessage(string $message, string $title='', ContextualFeedbackSeverity $severity=ContextualFeedbackSeverity::INFO)
Definition: MfaConfigurationController.php:348
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:32
‪TYPO3\CMS\Core\Type\ContextualFeedbackSeverity
‪ContextualFeedbackSeverity
Definition: ContextualFeedbackSeverity.php:25
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\saveAction
‪saveAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:247
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\unlock
‪bool unlock(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\addFormButtons
‪addFormButtons()
Definition: MfaConfigurationController.php:378
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\getRecommendedProvider
‪getRecommendedProvider()
Definition: AbstractMfaController.php:87
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderPropertyManager\create
‪static create(MfaProviderManifestInterface $provider, AbstractUserAuthentication $user)
Definition: MfaProviderPropertyManager.php:193
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\deactivateAction
‪deactivateAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:192
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface\getTitle
‪getTitle()
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface\isDefaultProviderAllowed
‪isDefaultProviderAllowed()
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\isActionAllowed
‪isActionAllowed(string $action)
Definition: AbstractMfaController.php:51
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\unlockAction
‪unlockAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:210
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderPropertyManager
Definition: MfaProviderPropertyManager.php:33
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\isLocked
‪isLocked(MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Backend\Controller\AbstractMfaController\initializeMfaConfiguration
‪initializeMfaConfiguration()
Definition: AbstractMfaController.php:71
‪TYPO3\CMS\Core\Http\RedirectResponse
Definition: RedirectResponse.php:30
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\removeDefaultProvider
‪removeDefaultProvider()
Definition: MfaConfigurationController.php:342
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\isActive
‪isActive(MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderInterface\update
‪bool update(ServerRequestInterface $request, MfaProviderPropertyManager $propertyManager)
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:27
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$view
‪ModuleTemplate $view
Definition: MfaConfigurationController.php:52
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$allowedActions
‪array $allowedActions
Definition: MfaConfigurationController.php:49
‪TYPO3\CMS\Core\Authentication\Mfa\MfaProviderManifestInterface\getIdentifier
‪getIdentifier()
‪TYPO3\CMS\Backend\Attribute\AsController
Definition: AsController.php:25
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\addOverviewButtons
‪addOverviewButtons(ServerRequestInterface $request)
Definition: MfaConfigurationController.php:356
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\editAction
‪editAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:225
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\setupAction
‪setupAction(ServerRequestInterface $request, MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:136
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$providerActionsWhenActive
‪array $providerActionsWhenActive
Definition: MfaConfigurationController.php:51
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\overviewAction
‪overviewAction(ServerRequestInterface $request)
Definition: MfaConfigurationController.php:121
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\handleRequest
‪handleRequest(ServerRequestInterface $request)
Definition: MfaConfigurationController.php:64
‪TYPO3\CMS\Core\Authentication\Mfa\MfaViewType
‪MfaViewType
Definition: MfaViewType.php:24
‪TYPO3\CMS\Backend\Template\Components\ButtonBar\BUTTON_POSITION_RIGHT
‪const BUTTON_POSITION_RIGHT
Definition: ButtonBar.php:42
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\getRecommendedProviderIdentifier
‪getRecommendedProviderIdentifier()
Definition: MfaConfigurationController.php:319
‪TYPO3\CMS\Backend\Controller
Definition: AboutController.php:18
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController
Definition: MfaConfigurationController.php:48
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\$providerActionsWhenInactive
‪array $providerActionsWhenInactive
Definition: MfaConfigurationController.php:50
‪TYPO3\CMS\Core\Messaging\FlashMessageService
Definition: FlashMessageService.php:27
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37
‪TYPO3\CMS\Core\Http\HtmlResponse
Definition: HtmlResponse.php:28
‪TYPO3\CMS\Backend\Controller\MfaConfigurationController\isDefaultProvider
‪isDefaultProvider(MfaProviderManifestInterface $mfaProvider)
Definition: MfaConfigurationController.php:331
‪TYPO3\CMS\Backend\Controller\AbstractMfaController
Definition: AbstractMfaController.php:34