Esempio n. 1
0
 /**
  * Handle REST request.
  *
  * @return Mage_Webapi_Controller_Dispatcher_Rest
  */
 public function dispatch()
 {
     try {
         $this->_authentication->authenticate();
         $route = $this->_router->match($this->_request);
         $operation = $this->_request->getOperationName();
         $resourceVersion = $this->_request->getResourceVersion();
         $this->_apiConfig->validateVersionNumber($resourceVersion, $this->_request->getResourceName());
         $method = $this->_apiConfig->getMethodNameByOperation($operation, $resourceVersion);
         $controllerClassName = $this->_apiConfig->getControllerClassByOperationName($operation);
         $controllerInstance = $this->_controllerFactory->createActionController($controllerClassName, $this->_request);
         $versionAfterFallback = $this->_apiConfig->identifyVersionSuffix($operation, $resourceVersion, $controllerInstance);
         /**
          * Route check has two stages:
          * The first is performed against full list of routes that is merged from all resources.
          * The second stage of route check can be performed only when actual version to be executed is known.
          */
         $this->_router->checkRoute($this->_request, $method, $versionAfterFallback);
         $this->_apiConfig->checkDeprecationPolicy($route->getResourceName(), $method, $versionAfterFallback);
         $action = $method . $versionAfterFallback;
         $this->_authorization->checkResourceAcl($route->getResourceName(), $method);
         $inputData = $this->_restPresentation->fetchRequestData($controllerInstance, $action);
         $outputData = call_user_func_array(array($controllerInstance, $action), $inputData);
         $this->_restPresentation->prepareResponse($method, $outputData);
     } catch (Exception $e) {
         $this->_response->setException($e);
     }
     $this->_response->sendResponse();
     return $this;
 }
Esempio n. 2
0
 /**
  * Check whether current request matches any route of specified method or not. Method version is taken into account.
  *
  * @param Mage_Webapi_Controller_Request_Rest $request
  * @param string $methodName
  * @param string $version
  * @throws Mage_Webapi_Exception In case when request does not match any route of specified method.
  */
 public function checkRoute(Mage_Webapi_Controller_Request_Rest $request, $methodName, $version)
 {
     $resourceName = $request->getResourceName();
     $routes = $this->_apiConfig->getMethodRestRoutes($resourceName, $methodName, $version);
     foreach ($routes as $route) {
         if ($route->match($request)) {
             return;
         }
     }
     throw new Mage_Webapi_Exception($this->_helper->__('Request does not match any route.'), Mage_Webapi_Exception::HTTP_NOT_FOUND);
 }
Esempio n. 3
0
 /**
  * Test dispatch method.
  */
 public function testDispatch()
 {
     $this->_authenticationMock->expects($this->once())->method('authenticate');
     /** Init route mock. */
     $routeMock = $this->getMockBuilder('Mage_Webapi_Controller_Router_Route_Rest')->disableOriginalConstructor()->getMock();
     $routeMock->expects($this->any())->method('getResourceName');
     $this->_routerMock->expects($this->once())->method('match')->will($this->returnValue($routeMock));
     /** Mock Api Config getMethodNameByOperation method to return isDeleted method of Varien_Onject. */
     $this->_apiConfigMock->expects($this->once())->method('getMethodNameByOperation')->will($this->returnValue('isDeleted'));
     /** Mock Api config identifyVersionSuffix method to return empty string. */
     $this->_apiConfigMock->expects($this->once())->method('identifyVersionSuffix')->will($this->returnValue(''));
     $this->_apiConfigMock->expects($this->once())->method('checkDeprecationPolicy');
     $this->_authorizationMock->expects($this->once())->method('checkResourceAcl');
     /** Create fake controller mock, e. g. Varien_Object object. */
     $controllerMock = $this->getMockBuilder('Varien_Object')->disableOriginalConstructor()->getMock();
     /** Assert isDeleted method will be executed once. */
     $controllerMock->expects($this->once())->method('isDeleted');
     /** Mock factory mock to return fake action controller. */
     $this->_controllerFactory->expects($this->once())->method('createActionController')->will($this->returnValue($controllerMock));
     /** Mock Rest presentation fetchRequestData method to return empty array. */
     $this->_restPresentation->expects($this->once())->method('fetchRequestData')->will($this->returnValue(array()));
     /** Assert response sendResponse method will be executed once. */
     $this->_responseMock->expects($this->once())->method('sendResponse');
     $this->_restDispatcher->dispatch();
 }
Esempio n. 4
0
 /**
  * Generate resource location.
  *
  * @param Mage_Core_Model_Abstract $createdItem
  * @return string URL
  */
 protected function _getCreatedItemLocation($createdItem)
 {
     $apiTypeRoute = $this->_routeFactory->createRoute('Mage_Webapi_Controller_Router_Route_Webapi', Mage_Webapi_Controller_Router_Route_Webapi::getApiRoute());
     $resourceName = $this->_request->getResourceName();
     $routeToItem = $this->_routeFactory->createRoute('Zend_Controller_Router_Route', $this->_apiConfig->getRestRouteToItem($resourceName));
     $chain = $apiTypeRoute->chain($routeToItem);
     $params = array(Mage_Webapi_Controller_Router_Route_Webapi::PARAM_API_TYPE => $this->_request->getApiType(), Mage_Webapi_Controller_Router_Route_Rest::PARAM_ID => $createdItem->getId(), Mage_Webapi_Controller_Router_Route_Rest::PARAM_VERSION => $this->_request->getResourceVersion());
     $uri = $chain->assemble($params);
     return '/' . $uri;
 }
Esempio n. 5
0
 /**
  * Prepare mocks for SUT constructor for testCheckRoute().
  *
  * @return array
  */
 protected function _prepareMockDataForCheckRouteTest()
 {
     $methodName = 'foo';
     $version = 'bar';
     $request = $this->getMockBuilder('Mage_Webapi_Controller_Request_Rest')->disableOriginalConstructor()->setMethods(array('getResourceName'))->getMock();
     $resourceName = 'Resource Name';
     $request->expects($this->once())->method('getResourceName')->will($this->returnValue($resourceName));
     $this->_apiConfigMock->expects($this->once())->method('getMethodRestRoutes')->with($resourceName, $methodName, $version)->will($this->returnValue(array($this->_routeMock)));
     return array('request' => $request, 'methodName' => $methodName, 'version' => $version);
 }