Example #1
0
 /**
  * Routes the specified web request by setting the controller name, action and possible
  * parameters. If the request could not be routed, it will be left untouched.
  *
  * @param \TYPO3\FLOW3\Http\Request $httpRequest The web request to be analyzed. Will be modified by the router.
  * @return \TYPO3\FLOW3\Mvc\ActionRequest
  */
 public function route(\TYPO3\FLOW3\Http\Request $httpRequest)
 {
     $this->actionRequest = $httpRequest->createActionRequest();
     $routePath = substr($httpRequest->getUri()->getPath(), strlen($httpRequest->getBaseUri()->getPath()));
     $matchResults = $this->findMatchResults($routePath);
     if ($matchResults !== NULL) {
         $requestArguments = $this->actionRequest->getArguments();
         $mergedArguments = Arrays::arrayMergeRecursiveOverrule($requestArguments, $matchResults);
         $this->actionRequest->setArguments($mergedArguments);
     }
     $this->setDefaultControllerAndActionNameIfNoneSpecified();
     return $this->actionRequest;
 }
Example #2
0
 /**
  * Updates the username and password credentials from the POST vars, if the POST parameters
  * are available. Sets the authentication status to REAUTHENTICATION_NEEDED, if credentials have been sent.
  *
  * @param \TYPO3\FLOW3\Mvc\ActionRequest $actionRequest The current action request instance
  * @return void
  */
 public function updateCredentials(\TYPO3\FLOW3\Mvc\ActionRequest $actionRequest)
 {
     $getArguments = $actionRequest->getArguments();
     if (!empty($getArguments['user']) && !empty($getArguments['signature']) && !empty($getArguments['expires']) && !empty($getArguments['version']) && !empty($getArguments['tpa_id']) && !empty($getArguments['action']) && !empty($getArguments['flags']) && !empty($getArguments['userdata'])) {
         $this->credentials['username'] = $getArguments['user'];
         $this->credentials['signature'] = \TYPO3\FLOW3\Utility\TypeHandling::hex2bin($getArguments['signature']);
         $this->credentials['expires'] = $getArguments['expires'];
         $this->credentials['version'] = $getArguments['version'];
         $this->credentials['tpaId'] = $getArguments['tpa_id'];
         $this->credentials['action'] = $getArguments['action'];
         $this->credentials['flags'] = $getArguments['flags'];
         $this->credentials['userdata'] = $getArguments['userdata'];
         $this->setAuthenticationStatus(self::AUTHENTICATION_NEEDED);
     }
 }
Example #3
0
 /**
  * Merges specified arguments with arguments from request.
  *
  * If $this->request is no sub request, request arguments will only be merged if $this->addQueryString is set.
  * Otherwise all request arguments except for the ones prefixed with the current request argument namespace will
  * be merged. Additionally special arguments (PackageKey, SubpackageKey, ControllerName & Action) are merged.
  *
  * The argument provided through the $arguments parameter always overrule the request
  * arguments.
  *
  * The request hierarchy is structured as follows:
  * root (HTTP) > main (Action) > sub (Action) > sub sub (Action)
  *
  * @param array $arguments
  * @return void
  */
 protected function mergeArgumentsWithRequestArguments(array &$arguments)
 {
     $requestArguments = array();
     $mainRequest = $this->request->getMainRequest();
     $isSubRequest = $this->request !== $mainRequest;
     if ($isSubRequest) {
         $requestArguments = $mainRequest->getArguments();
         // remove all arguments of the current sub request
         if ($this->request->getArgumentNamespace() !== '') {
             $requestNamespace = $this->getRequestNamespacePath($this->request);
             if ($this->addQueryString === FALSE) {
                 $requestArguments = Arrays::unsetValueByPath($requestArguments, $requestNamespace);
             } else {
                 foreach ($this->argumentsToBeExcludedFromQueryString as $argumentToBeExcluded) {
                     $requestArguments = Arrays::unsetValueByPath($requestArguments, $requestNamespace . '.' . $argumentToBeExcluded);
                 }
             }
         }
         // merge special arguments (package, subpackage, controller & action) from main request
         $mainRequestPackageKey = $mainRequest->getControllerPackageKey();
         if (!empty($mainRequestPackageKey)) {
             $requestArguments['@package'] = $mainRequestPackageKey;
         }
         $mainRequestSubpackageKey = $mainRequest->getControllerSubpackageKey();
         if (!empty($mainRequestSubpackageKey)) {
             $requestArguments['@subpackage'] = $mainRequestSubpackageKey;
         }
         $mainRequestControllerName = $mainRequest->getControllerName();
         if (!empty($mainRequestControllerName)) {
             $requestArguments['@controller'] = $mainRequestControllerName;
         }
         $mainRequestActionName = $mainRequest->getControllerActionName();
         if (!empty($mainRequestActionName)) {
             $requestArguments['@action'] = $mainRequestActionName;
         }
     } elseif ($this->addQueryString === TRUE) {
         $requestArguments = $this->request->getArguments();
         foreach ($this->argumentsToBeExcludedFromQueryString as $argumentToBeExcluded) {
             unset($requestArguments[$argumentToBeExcluded]);
         }
     }
     if (count($requestArguments) === 0) {
         return;
     }
     $arguments = Arrays::arrayMergeRecursiveOverrule($requestArguments, $arguments);
 }
Example #4
0
 /**
  * @test
  */
 public function allArgumentsCanBeSetOrRetrievedAtOnce()
 {
     $httpRequest = HttpRequest::create(new Uri('http://robertlemke.com/blog'));
     $arguments = array('foo' => 'fooValue', 'bar' => 'barValue');
     $actionRequest = new ActionRequest($httpRequest);
     $actionRequest->setArguments($arguments);
     $this->assertEquals($arguments, $actionRequest->getArguments());
 }