17 use Psr\Http\Message\ResponseInterface;
18 use Psr\Http\Message\ServerRequestInterface;
45 public function dispatch(ServerRequestInterface $request, ResponseInterface $response =
null): ResponseInterface
47 $router = GeneralUtility::makeInstance(Router::class);
48 $route = $router->matchRequest($request);
49 $request = $request->withAttribute(
'route', $route);
50 $request = $request->withAttribute(
'target', $route->getOption(
'target'));
53 if ($enforceReferrerResponse instanceof ResponseInterface) {
54 return $enforceReferrerResponse;
60 if ($route->getOption(
'module')) {
63 $targetIdentifier = $route->getOption(
'target');
65 $arguments = [$request];
68 $scanForResponse = !GeneralUtility::makeInstance(Features::class)
69 ->isFeatureEnabled(
'simplifiedControllerActionDispatching');
70 if ($scanForResponse) {
71 if (is_array($targetIdentifier)) {
72 $controllerActionName = implode(
'::', $targetIdentifier);
73 $targetReflection = new \ReflectionMethod($controllerActionName);
74 } elseif (is_string($targetIdentifier) && strpos($targetIdentifier,
'::') !==
false) {
75 $controllerActionName = $targetIdentifier;
76 $targetReflection = new \ReflectionMethod($controllerActionName);
77 } elseif (is_callable($targetIdentifier)) {
78 $controllerActionName =
'closure function';
79 $targetReflection = new \ReflectionFunction($targetIdentifier);
81 $controllerActionName = $targetIdentifier .
'::__invoke';
82 $targetReflection = new \ReflectionMethod($controllerActionName);
84 if ($targetReflection->getNumberOfParameters() >= 2) {
86 'Handing over second argument $response to controller action ' . $controllerActionName .
'() is deprecated and will be removed in TYPO3 v10.0.',
89 $arguments[] = $response;
93 return call_user_func_array($target, $arguments);
117 $features = GeneralUtility::makeInstance(Features::class);
118 if (!$features->isFeatureEnabled(
'security.backend.enforceReferrer')) {
122 $route = $request->getAttribute(
'route');
123 $referrerFlags = GeneralUtility::trimExplode(
',', $route->getOption(
'referrer') ??
'',
true);
124 if (!in_array(
'required', $referrerFlags,
true)) {
128 $referrerEnforcer = GeneralUtility::makeInstance(ReferrerEnforcer::class, $request);
129 return $referrerEnforcer->handle([
130 'flags' => $referrerFlags,
131 'subject' => $route->getPath(),
146 $route = $request->getAttribute(
'route');
147 if ($route->getOption(
'access') ===
'public') {
150 $token = (string)($request->getParsedBody()[
'token'] ?? $request->getQueryParams()[
'token']);
152 return $this->
getFormProtection()->validateToken($token,
'route', $route->getOption(
'_identifier'));
156 $token = (string)($request->getParsedBody()[
'moduleToken'] ?? $request->getQueryParams()[
'moduleToken']);
157 return $this->
getFormProtection()->validateToken($token,
'moduleCall', $request->getParsedBody()[
'M'] ?? $request->getQueryParams()[
'M']);
170 $moduleName = $route->
getOption(
'moduleName');
172 $route->
setOption(
'moduleConfiguration', $moduleConfiguration);
174 $backendUserAuthentication =
$GLOBALS[
'BE_USER'];
177 $backendUserAuthentication->modAccess($moduleConfiguration);
178 $id = $request->getQueryParams()[
'id'] ?? $request->getParsedBody()[
'id'];
184 $deleteField =
$GLOBALS[
'TCA'][
'pages'][
'ctrl'][
'delete'];
186 if (!$pageInfo[$deleteField]) {
187 throw new \RuntimeException(
'You don\'t have access to this page', 1289917924);
202 if (!isset(
$GLOBALS[
'TBE_MODULES'][
'_configuration'][$moduleName])) {
203 throw new \RuntimeException(
'Module ' . $moduleName .
' is not configured.', 1289918325);
205 return $GLOBALS[
'TBE_MODULES'][
'_configuration'][$moduleName];