/** * Hängt zusätzliche Informationen an jeden Response an * @param Dragon_Json_Server_Request_Http $request * @param Dragon_Json_Server_Response_Http $response */ public function postDispatch(Dragon_Json_Server_Request_Http $request, Dragon_Json_Server_Response_Http $response) { $lastResponse = $request->getOptionalParam('timestamp'); if (isset($lastResponse) && $lastResponse == -1) { return; } $actualResponse = time(); $messages = array(); if (isset($lastResponse)) { $pluginregistry = Zend_Registry::get('Dragon_Plugin_Registry'); $plugins = $pluginregistry->getPlugins('DragonX_Clientmessage_Plugin_Source_Interface'); foreach ($plugins as $plugin) { $list = $plugin->getClientmessages($lastResponse, $actualResponse); foreach ($list as $record) { if (!isset($messages[$record->key])) { $messages[$record->key] = array(); } try { $record->result = Zend_Json::decode($record->result); } catch (Exception $exception) { } $messages[$record->key][] = array('created' => $record->created, 'result' => $record->result); } } foreach ($messages as $key => &$submessages) { usort($submessages, array($this, '_compareMessages')); } unset($submessages); } $response->setResult(array('result' => $response->getResult(), 'timestamp' => $actualResponse) + $messages); }
/** * Prüft bei jedem Request die Authentifizierung * @param Dragon_Json_Server_Request_Http $request */ public function preDispatch(Dragon_Json_Server_Request_Http $request) { list($classname, $methodname) = $request->parseMethod(); if (!$this->_authenticateRequired($classname, $methodname)) { return; } $params = $request->getRequiredParams(array('sessionhash')); $logicSession = new DragonX_Account_Logic_Session(); $recordAccount = $logicSession->getAccount($params['sessionhash']); $logicAccount = new DragonX_Account_Logic_Account(); $logicAccount->requestAccount($recordAccount); Zend_Registry::get('Dragon_Plugin_Registry')->invoke('DragonX_Account_Plugin_LoadAccount_Interface', array($recordAccount)); Zend_Registry::set('recordAccount', $recordAccount); }
/** * Sendet den übergebenen Request zum Server und gibt das Result zurück * @param Dragon_Json_Server_Request_Http $request * @return array */ public function send(Dragon_Json_Server_Request_Http $request) { $request->addParam(-1, 'timestamp'); $body = $this->_httpclient->setRawData($request->toJson())->request('POST')->getBody(); try { $response = Zend_Json::decode($body); } catch (Exception $exception) { throw new Dragon_Application_Exception_System('decoding failed', array('message' => $exception->getMessage(), 'body' => $body)); } if (!is_array($response) || !array_key_exists('id', $response)) { throw new Dragon_Application_Exception_System('invalid response', array('response' => $response, 'body' => $body)); } if (array_key_exists('error', $response)) { throw new Dragon_Application_Exception_System($response['error']['message'], array('error' => $response['error'])); } if (!array_key_exists('result', $response)) { throw new Dragon_Application_Exception_System('invalid response', array('response' => $response, 'body' => $body)); } return $response['result']; }
/** * Prüft bei jedem Request ist die Authentifizierung * @param Dragon_Json_Server_Request_Http $request */ public function preDispatch(Dragon_Json_Server_Request_Http $request) { try { list($classname, $methodname) = $request->parseMethod(); $reflectionClass = new Zend_Reflection_Class($classname); $tagResource = $reflectionClass->getMethod($methodname)->getDocblock()->getTag('dragonx_acl_resource'); if (!$tagResource) { return; } $resource = $tagResource->getDescription(); } catch (Exception $exception) { return; } $resources = array(); if (Zend_Registry::isRegistered('recordAccount')) { $logicAcl = new DragonX_Acl_Logic_Acl(); $resources = $logicAcl->getResources(Zend_Registry::get('recordAccount')); } if (!in_array($resource, $resources)) { throw new Dragon_Application_Exception_System('missing resource', array('resource' => $resource)); } }
/** * Loggt vor jedem Request die Requestparameter und den Requesttimestamp * @param Dragon_Json_Server_Request_Http $request */ public function preDispatch(Dragon_Json_Server_Request_Http $request) { $logicRequest = new DragonX_Log_Logic_Request(); $logicRequest->request($request->getMethod(), $request->getId(), $request->getVersion(), $request->getParams()); }