‪TYPO3CMS  ‪main
SudoModeInterceptor.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\Server\MiddlewareInterface;
23 use Psr\Http\Server\RequestHandlerInterface;
24 use Psr\Log\LoggerAwareInterface;
25 use Psr\Log\LoggerAwareTrait;
31 
39 final class ‪SudoModeInterceptor implements MiddlewareInterface, LoggerAwareInterface
40 {
41  use LoggerAwareTrait;
42 
43  public function ‪__construct(
44  private readonly ‪AccessStorage $storage,
45  private readonly ‪SudoModeController $controller,
46  ) {}
47 
48  public function ‪process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
49  {
50  try {
51  return $handler->handle($request);
52  } catch (‪VerificationRequiredException $exception) {
53  return $this->‪handleVerificationRequired($exception);
54  } catch (‪RequestGrantedException $exception) {
55  return $this->‪handleRequestGrantedException($exception);
56  }
57  }
58 
62  private function ‪handleVerificationRequired(‪VerificationRequiredException $exception): ResponseInterface
63  {
64  $claim = $exception->‪getClaim();
65  $this->logger->info('Confirmation required', ['claim' => $claim->id]);
66  $this->storage->addClaim($claim);
67  $uri = $this->controller->buildModuleActionUriForClaim($claim);
68  return new ‪RedirectResponse($uri, 401);
69  }
70 
74  private function ‪handleRequestGrantedException(‪RequestGrantedException $exception): ?ResponseInterface
75  {
76  $instruction = $exception->‪getInstruction();
77  // other request methods than HTTP GET are currently not supported
78  // (there is much more to do, in terms of intercepting AJAX request etc.)
79  if ($instruction->getMethod() === 'GET') {
80  return new ‪RedirectResponse($instruction->getUri(), 303);
81  }
82  return null;
83  }
84 }
‪TYPO3\CMS\Backend\Middleware\SudoModeInterceptor\__construct
‪__construct(private readonly AccessStorage $storage, private readonly SudoModeController $controller,)
Definition: SudoModeInterceptor.php:43
‪TYPO3\CMS\Backend\Middleware
Definition: AdditionalResponseHeaders.php:18
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessStorage
Definition: AccessStorage.php:30
‪TYPO3\CMS\Backend\Security\SudoMode\Exception\RequestGrantedException\getInstruction
‪getInstruction()
Definition: RequestGrantedException.php:38
‪TYPO3\CMS\Backend\Middleware\SudoModeInterceptor\process
‪process(ServerRequestInterface $request, RequestHandlerInterface $handler)
Definition: SudoModeInterceptor.php:48
‪TYPO3\CMS\Backend\Security\SudoMode\Exception\RequestGrantedException
Definition: RequestGrantedException.php:29
‪TYPO3\CMS\Backend\Middleware\SudoModeInterceptor\handleRequestGrantedException
‪handleRequestGrantedException(RequestGrantedException $exception)
Definition: SudoModeInterceptor.php:74
‪TYPO3\CMS\Core\Http\RedirectResponse
Definition: RedirectResponse.php:30
‪TYPO3\CMS\Backend\Middleware\SudoModeInterceptor
Definition: SudoModeInterceptor.php:40
‪TYPO3\CMS\Backend\Middleware\SudoModeInterceptor\handleVerificationRequired
‪handleVerificationRequired(VerificationRequiredException $exception)
Definition: SudoModeInterceptor.php:62
‪TYPO3\CMS\Backend\Controller\Security\SudoModeController
Definition: SudoModeController.php:49
‪TYPO3\CMS\Backend\Security\SudoMode\Exception\VerificationRequiredException\getClaim
‪getClaim()
Definition: VerificationRequiredException.php:38
‪TYPO3\CMS\Backend\Security\SudoMode\Exception\VerificationRequiredException
Definition: VerificationRequiredException.php:29