/** * @param array $module * @return mixed */ public function indexAction(array $module) { $moduleRequest = new ActionRequest($this->request); $moduleRequest->setArgumentNamespace('moduleArguments'); $moduleRequest->setControllerObjectName($module['controller']); $moduleRequest->setControllerActionName($module['action']); if (isset($module['format'])) { $moduleRequest->setFormat($module['format']); } if ($this->request->hasArgument($moduleRequest->getArgumentNamespace()) === true && is_array($this->request->getArgument($moduleRequest->getArgumentNamespace()))) { $moduleRequest->setArguments($this->request->getArgument($moduleRequest->getArgumentNamespace())); } foreach ($this->request->getPluginArguments() as $argumentNamespace => $argument) { $moduleRequest->setArgument('--' . $argumentNamespace, $argument); } $modules = explode('/', $module['module']); $moduleConfiguration = Arrays::getValueByPath($this->settings['modules'], implode('.submodules.', $modules)); $moduleConfiguration['path'] = $module['module']; if (!$this->menuHelper->isModuleEnabled($moduleConfiguration['path'])) { throw new DisabledModuleException(sprintf('The module "%s" is disabled. You can enable it with the "enabled" flag in Settings.yaml.', $module['module']), 1437148922); } $moduleBreadcrumb = array(); $path = array(); foreach ($modules as $moduleIdentifier) { array_push($path, $moduleIdentifier); $config = Arrays::getValueByPath($this->settings['modules'], implode('.submodules.', $path)); $moduleBreadcrumb[implode('/', $path)] = $config; } $moduleRequest->setArgument('__moduleConfiguration', $moduleConfiguration); $moduleResponse = new Response($this->response); $this->dispatcher->dispatch($moduleRequest, $moduleResponse); if ($moduleResponse->hasHeader('Location')) { $this->redirectToUri($moduleResponse->getHeader('Location'), 0, $moduleResponse->getStatusCode()); } elseif ($moduleRequest->getFormat() !== 'html') { $mediaType = MediaTypes::getMediaTypeFromFilename('file.' . $moduleRequest->getFormat()); if ($mediaType !== 'application/octet-stream') { $this->controllerContext->getResponse()->setHeader('Content-Type', $mediaType); } return $moduleResponse->getContent(); } else { $user = $this->securityContext->getPartyByType('TYPO3\\Neos\\Domain\\Model\\User'); $sites = $this->menuHelper->buildSiteList($this->controllerContext); $this->view->assignMultiple(array('moduleClass' => implode('-', $modules), 'moduleContents' => $moduleResponse->getContent(), 'title' => $moduleRequest->hasArgument('title') ? $moduleRequest->getArgument('title') : $moduleConfiguration['label'], 'rootModule' => array_shift($modules), 'submodule' => array_shift($modules), 'moduleConfiguration' => $moduleConfiguration, 'moduleBreadcrumb' => $moduleBreadcrumb, 'user' => $user, 'modules' => $this->menuHelper->buildModuleList($this->controllerContext), 'sites' => $sites)); } }
/** * @return void * @internal */ protected function processSubmittedFormValues() { $result = $this->mapAndValidatePage($this->lastDisplayedPage); if ($result->hasErrors() && !$this->userWentBackToPreviousStep()) { $this->currentPage = $this->lastDisplayedPage; $this->request->setArgument('__submittedArguments', $this->request->getArguments()); $this->request->setArgument('__submittedArgumentValidationResults', $result); } }
/** * @test * @expectedException \TYPO3\Flow\Security\Exception\InvalidHashException */ public function getReferringRequestThrowsAnExceptionIfTheHmacOfTheArgumentsCouldNotBeValid() { $serializedArguments = base64_encode('some manipulated arguments string without valid HMAC'); $referrer = array('@controller' => 'Foo', '@action' => 'bar', 'arguments' => $serializedArguments); $mockHashService = $this->getMockBuilder(\TYPO3\Flow\Security\Cryptography\HashService::class)->getMock(); $mockHashService->expects($this->once())->method('validateAndStripHmac')->with($serializedArguments)->will($this->throwException(new InvalidHashException())); $this->inject($this->actionRequest, 'hashService', $mockHashService); $this->actionRequest->setArgument('__referrer', $referrer); $this->actionRequest->getReferringRequest(); }
/** * @param string $path * @return string * @throws \Exception */ public function render($path = NULL) { /** @var RequestHandler $activeRequestHandler */ $activeRequestHandler = $this->bootstrap->getActiveRequestHandler(); $parentHttpRequest = $activeRequestHandler->getHttpRequest(); $httpRequest = Request::create(new Uri($parentHttpRequest->getBaseUri() . $path . '.html')); $matchingRoute = $this->router->route($httpRequest); if (!$matchingRoute) { throw new \Exception(sprintf('Uri with path "%s" could not be found.', $parentHttpRequest->getBaseUri() . $path . '.html'), 1426446160); } $request = new ActionRequest($parentHttpRequest); foreach ($matchingRoute as $argumentName => $argumentValue) { $request->setArgument($argumentName, $argumentValue); } $response = new Response($activeRequestHandler->getHttpResponse()); $this->dispatcher->dispatch($request, $response); return $response->getContent(); }
/** * @test * @expectedException \TYPO3\Flow\Security\Exception\InvalidHashException */ public function getReferringRequestThrowsAnExceptionIfTheHmacOfTheArgumentsCouldNotBeValid() { $referrer = array('@controller' => 'Foo', '@action' => 'bar', 'arguments' => base64_encode('some manipulated arguments string without valid HMAC')); $httpRequest = HttpRequest::create(new Uri('http://acme.com', 'GET')); $request = new ActionRequest($httpRequest); $request->setArgument('__referrer', $referrer); $this->inject($request, 'hashService', new \TYPO3\Flow\Security\Cryptography\HashService()); $request->getReferringRequest(); }