/** * Create an action request from stored route match values and dispatch to that * * @param ComponentContext $componentContext * @return void */ public function handle(ComponentContext $componentContext) { $httpRequest = $componentContext->getHttpRequest(); /** @var $actionRequest ActionRequest */ $actionRequest = $this->objectManager->get(ActionRequest::class, $httpRequest); $this->securityContext->setRequest($actionRequest); $routingMatchResults = $componentContext->getParameter(Routing\RoutingComponent::class, 'matchResults'); $actionRequest->setArguments($this->mergeArguments($httpRequest, $routingMatchResults)); $this->setDefaultControllerAndActionNameIfNoneSpecified($actionRequest); $componentContext->setParameter(self::class, 'actionRequest', $actionRequest); $this->dispatcher->dispatch($actionRequest, $componentContext->getHttpResponse()); }
/** * Check if the current request match a redirect * * @param ComponentContext $componentContext * @return void */ public function handle(ComponentContext $componentContext) { $routingMatchResults = $componentContext->getParameter(RoutingComponent::class, 'matchResults'); if ($routingMatchResults !== NULL) { return; } $httpRequest = $componentContext->getHttpRequest(); $response = $this->redirectService->buildResponseIfApplicable($httpRequest); if ($response !== null) { $componentContext->replaceHttpResponse($response); $componentContext->setParameter(ComponentChain::class, 'cancel', true); } }
/** * Check if the current request contains a widget context. * If so dispatch it directly, otherwise continue with the next HTTP component. * * @param ComponentContext $componentContext * @return void * @throws ComponentException */ public function handle(ComponentContext $componentContext) { $httpRequest = $componentContext->getHttpRequest(); $widgetContext = $this->extractWidgetContext($httpRequest); if ($widgetContext === null) { return; } /** @var $actionRequest ActionRequest */ $actionRequest = $this->objectManager->get(\Neos\Flow\Mvc\ActionRequest::class, $httpRequest); $actionRequest->setArguments($this->mergeArguments($httpRequest, array())); $actionRequest->setArgument('__widgetContext', $widgetContext); $actionRequest->setControllerObjectName($widgetContext->getControllerObjectName()); $this->setDefaultControllerAndActionNameIfNoneSpecified($actionRequest); $this->securityContext->setRequest($actionRequest); $this->dispatcher->dispatch($actionRequest, $componentContext->getHttpResponse()); // stop processing the current component chain $componentContext->setParameter(\Neos\Flow\Http\Component\ComponentChain::class, 'cancel', true); }
/** * @param ComponentContext $componentContext * @return void * @api */ public function handle(ComponentContext $componentContext) { $request = $componentContext->getHttpRequest(); $trustedRequest = $request->withAttribute(Request::ATTRIBUTE_TRUSTED_PROXY, $this->isFromTrustedProxy($request)); $trustedRequest = $trustedRequest->withAttribute(Request::ATTRIBUTE_CLIENT_IP, $this->getTrustedClientIpAddress($trustedRequest)); $protocolHeader = $this->getFirstTrustedProxyHeaderValue(self::HEADER_PROTOCOL, $trustedRequest); if ($protocolHeader !== null) { $trustedRequest->getUri()->setScheme($protocolHeader); } $hostHeader = $this->getFirstTrustedProxyHeaderValue(self::HEADER_HOST, $trustedRequest); if ($hostHeader !== null) { $trustedRequest->getUri()->setHost($hostHeader); } $portHeader = $this->getFirstTrustedProxyHeaderValue(self::HEADER_PORT, $trustedRequest); if ($portHeader !== null) { $trustedRequest->getUri()->setPort($portHeader); } elseif ($protocolHeader !== null) { $trustedRequest->getUri()->setPort(strtolower($protocolHeader) === 'https' ? 443 : 80); } $componentContext->replaceHttpRequest($trustedRequest); }
/** * Just call makeStandardsCompliant on the Response for now * * @param ComponentContext $componentContext * @return void */ public function handle(ComponentContext $componentContext) { $response = $componentContext->getHttpResponse(); $response->makeStandardsCompliant($componentContext->getHttpRequest()); }
/** * Resolve a route for the request * * Stores the resolved route values in the ComponentContext to pass them * to other components. They can be accessed via ComponentContext::getParameter(outingComponent::class, 'matchResults'); * * @param ComponentContext $componentContext * @return void */ public function handle(ComponentContext $componentContext) { $matchResults = $this->router->route($componentContext->getHttpRequest()); $componentContext->setParameter(RoutingComponent::class, 'matchResults', $matchResults); }
/** * Returns the currently handled HTTP request * * @return Request * @api */ public function getHttpRequest() { return $this->componentContext->getHttpRequest(); }