‪TYPO3CMS  ‪main
AccessFactory.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;
23 
30 {
31  protected const ‪DEFAULT_CLAIM_LIFETIME = 300;
32 
33  protected readonly int ‪$currentTimestamp;
34 
35  public function ‪__construct()
36  {
37  $this->currentTimestamp = (int)(‪$GLOBALS['EXEC_TIME'] ?? time());
38  }
39 
40  public function ‪buildClaimFromArray(array $data): ‪AccessClaim
41  {
42  return GeneralUtility::makeInstance(
43  AccessClaim::class,
44  $this->‪buildSubjectFromArray($data['subject']),
45  ‪ServerRequestInstruction::buildFromArray($data['instruction']),
46  $data['expiration'] ?? 0,
47  $data['id'] ?? ''
48  );
49  }
50 
51  public function ‪buildGrantFromArray(array $data): ‪AccessGrant
52  {
53  return GeneralUtility::makeInstance(
54  AccessGrant::class,
55  $this->‪buildSubjectFromArray($data['subject']),
56  $data['expiration']
57  );
58  }
59 
61  {
62  $className = $data['class'] ?? '[empty]';
63  if (is_a($className, AccessSubjectInterface::class, true)) {
64  return $className::fromArray($data);
65  }
66  throw new \LogicException(
67  sprintf('Subject %s does not implement %s', $className, AccessSubjectInterface::class),
68  1605861181
69  );
70  }
71 
72  public function ‪buildRouteAccessSubject(ServerRequestInterface $request): ‪RouteAccessSubject
73  {
75  $route = $request->getAttribute('route');
76  if ($route === null) {
77  throw new \LogicException(
78  'Missing route request attribute',
79  1605861905
80  );
81  }
82  $settings = $route->getOption('sudoMode');
83  return GeneralUtility::makeInstance(
84  RouteAccessSubject::class,
85  rtrim($route->getPath(), '/'),
86  $settings['lifetime'] ?? null,
87  $settings['group'] ?? null
88  );
89  }
90 
91  public function ‪buildClaimForSubjectRequest(ServerRequestInterface $request, ‪AccessSubjectInterface $subject): ‪AccessClaim
92  {
93  return GeneralUtility::makeInstance(
94  AccessClaim::class,
95  $subject,
97  $this->currentTimestamp + self::DEFAULT_CLAIM_LIFETIME
98  );
99  }
100 
102  {
103  return GeneralUtility::makeInstance(
104  AccessGrant::class,
105  $subject,
106  $this->currentTimestamp + $subject->‪getLifetime()->inSeconds()
107  );
108  }
109 }
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\buildGrantForSubject
‪buildGrantForSubject(AccessSubjectInterface $subject)
Definition: AccessFactory.php:101
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\$currentTimestamp
‪readonly int $currentTimestamp
Definition: AccessFactory.php:33
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessClaim
Definition: AccessClaim.php:27
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\buildSubjectFromArray
‪buildSubjectFromArray(array $data)
Definition: AccessFactory.php:60
‪TYPO3\CMS\Backend\Security\SudoMode\Access\ServerRequestInstruction\createForServerRequest
‪static createForServerRequest(ServerRequestInterface $request)
Definition: ServerRequestInstruction.php:49
‪TYPO3\CMS\Backend\Security\SudoMode\Access
Definition: AccessClaim.php:18
‪TYPO3\CMS\Backend\Routing\Route
Definition: Route.php:24
‪TYPO3\CMS\Backend\Security\SudoMode\Access\RouteAccessSubject
Definition: RouteAccessSubject.php:27
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessSubjectInterface
Definition: AccessSubjectInterface.php:26
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\buildGrantFromArray
‪buildGrantFromArray(array $data)
Definition: AccessFactory.php:51
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory
Definition: AccessFactory.php:30
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\buildRouteAccessSubject
‪buildRouteAccessSubject(ServerRequestInterface $request)
Definition: AccessFactory.php:72
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\buildClaimForSubjectRequest
‪buildClaimForSubjectRequest(ServerRequestInterface $request, AccessSubjectInterface $subject)
Definition: AccessFactory.php:91
‪TYPO3\CMS\Backend\Security\SudoMode\Access\ServerRequestInstruction\buildFromArray
‪static buildFromArray(array $data)
Definition: ServerRequestInstruction.php:66
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessGrant
Definition: AccessGrant.php:27
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\DEFAULT_CLAIM_LIFETIME
‪const DEFAULT_CLAIM_LIFETIME
Definition: AccessFactory.php:31
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\buildClaimFromArray
‪buildClaimFromArray(array $data)
Definition: AccessFactory.php:40
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessSubjectInterface\getLifetime
‪getLifetime()
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\Security\SudoMode\Access\AccessFactory\__construct
‪__construct()
Definition: AccessFactory.php:35