public function execFilters(GraphRequest $req, Module $module, Action $action)
 {
     if ($req->getHeader('system-token') !== null && $req->getHeader('system-token') === Graphene::getInstance()->getSystemToken()) {
         return true;
     }
     $executed = array();
     self::$ids++;
     $errs = array();
     do {
         $execs = 0;
         foreach ($this->filters as $filter) {
             if (array_search($filter->getName(), $executed) === false && $this->checkAfter($executed, $filter)) {
                 $execs++;
                 $executed[] = $filter->getName();
                 Log::debug('executing filter: ' . $filter->getName());
                 if (!$filter->exec($req, $module, $action)) {
                     $errs[] = array('ignored' => $filter->errorIgnored(), 'name' => $filter->getName(), 'status' => $filter->getStatus(), 'message' => $filter->getMessage());
                 }
             }
         }
     } while ($execs > 0);
     if (count($executed) !== count($this->filters)) {
         Log::err('Some filter was not executed');
         //TODO elenco filtri non eseguiti e dipendenze richieste
     }
     $this->filterErrors[self::$ids] = $errs;
     return !$this->haveErrors();
 }
 public static function createByRequest(GraphRequest $request, Module $mod = null, $lazyChecks = false)
 {
     if ($mod == null) {
         $mod = Graphene::getInstance()->getCurrentModule();
     }
     if (($decoded = json_decode($request->getBody(), true)) === null) {
         throw new GraphException('Malformed request, check jsons structs on body', ExceptionsCodes::REQUEST_MALFORMED, 400);
     }
     $return = array();
     foreach ($decoded as $ModelName => $modelContent) {
         $domain = Graphene::getInstance()->getApplicationName() . '.' . $mod->getNamespace() . '.' . $ModelName;
         if (($return[$ModelName] = self::createModel($modelContent, $domain, $lazyChecks)) === false) {
             self::$BEAN_PARSING_ERRS[] = self::$LAST_BEAN->getLastTestErrors();
             throw new GraphException(self::$LAST_BEAN->getLastTestErrors(), ExceptionsCodes::REQUEST_MALFORMED, 400);
         }
     }
     return $return;
 }
 /**
  * Dirotta la richiesta al servizio che corrisponde al matching, ritornando
  * una risposta
  *
  * @param GraphRequest $request
  * @return GraphResponse
  */
 public function dispatch(GraphRequest $request)
 {
     $request->setContextPar('dispatchingId', uniqid());
     Graphene::getInstance()->startStat('DispatchingTime', $request->getMethod() . ' ' . $request->getUrl() . ' ' . $request->getContextPar('dispatchingId'));
     $response = null;
     $url = url_trimAndClean($request->getUrl());
     foreach ($this->modules as $dir => $module) {
         $domain = (string) $module->getDomain();
         if (str_starts_with($url, strtolower($domain))) {
             $this->pushModule($module);
             $response = $module->exec($request);
             $this->popModule();
             if ($response != null) {
                 break;
             }
         }
     }
     if ($response === null) {
     }
     return $this->getSafeResponse($response);
 }
 protected function forward($url, $data = null, $method = null, $checkErrors = true)
 {
     //Statistics
     $statId = uniqid();
     Graphene::getInstance()->startStat('RequestForwarding', $url . ' : ' . $statId);
     $req = new GraphRequest(true);
     $req->setUrl($url);
     //setting http method
     if ($data === null && $method === null) {
         $req->setMethod('GET');
     } else {
         if ($data !== null && $method === null) {
             $req->setMethod('POST');
         } else {
             if ($method !== null) {
                 $req->setMethod($method);
             }
         }
     }
     //setting request data
     if ($data === null) {
         $req->setData([]);
     } else {
         if (is_array($data)) {
             $req->setData($data);
         } else {
             if (is_string($data)) {
                 $req->setData(json_decode($data, true));
             } else {
                 if ($data instanceof Model) {
                     $req->setData($data->getData());
                 } else {
                     if ($data instanceof ModelCollection) {
                         $req->setData($data->getData());
                     }
                 }
             }
         }
     }
     //setting headers
     $headers = $this->request->getHeaders();
     foreach ($headers as $hk => $hv) {
         $req->setHeader($hk, $hv);
     }
     $req->setHeader('forwarded-by', $this->getUniqueActionName());
     $req->appendForward($this);
     $res = Graphene::getInstance()->forward($req);
     Graphene::getInstance()->stopStat('RequestForwarding', $url . ' : ' . $statId);
     if ($checkErrors && $res->getStatusCode() >= 400) {
         $data = $res->getData();
         throw new GraphException($res->getHeader('graphene-action') . ': ' . $data['error']['message'], $data['error']['code'], 400);
     }
     return $res;
 }
 public function getActionUrl(GraphRequest $request)
 {
     return substr($request->getUrl(), strlen((string) $this->domain) + 2);
 }
 /**
  * Crea un istanza di GraphRequest basandosi sulla richiesta ricevuta
  *
  * @return GraphRequest request
  */
 private function createRequest()
 {
     $req = new GraphRequest();
     $req->setUrl(G_requestUrl());
     $req->setIp($_SERVER['REMOTE_ADDR']);
     $req->setMethod($_SERVER['REQUEST_METHOD']);
     if (count($_POST) || count($_FILES) > 0) {
         $tree = $this->treeFromFlat(array_merge($_FILES, $_POST, $_GET));
         $req->setData($tree);
     } else {
         $jsonData = json_decode(file_get_contents("php://input"), true);
         if ($jsonData === null) {
             $jsonData = [];
         }
         $req->setData(array_merge($this->treeFromFlat($_GET), $jsonData));
     }
     $headers = apache_request_headers();
     foreach ($headers as $header => $value) {
         $req->setHeader($header, $value);
     }
     $this->pushRequest($req);
 }
 /**
  * @param $url
  * @param null $body
  * @param null $method
  * @return GraphResponse
  */
 protected function forward($url, $body = null, $method = null)
 {
     $req = new GraphRequest(true);
     $req->setUrl($url);
     /* Creazione metodo */
     if ($body == null && $method == null) {
         $req->setMethod('GET');
     } else {
         if ($body != null && $method == null) {
             $req->setMethod('POST');
         } else {
             if ($method != null) {
                 $req->setMethod($method);
             }
         }
     }
     /* Creazione body */
     if ($body != null) {
         $req->setBody($body);
     } else {
         $req->setBody('');
     }
     $headers = $this->request->getHeaders();
     foreach ($headers as $hk => $hv) {
         $req->setHeader($hk, $hv);
     }
     $req->setUserAgent($this->request->getUserAgent());
     $req->setHeader('forwarded-by', $this->getName());
     //$req->appendForward($this);
     /* Forwarding */
     $fw = Graphene::getInstance();
     $req->setHeader('system-token', Graphene::getInstance()->getSystemToken());
     return $fw->forward($req);
 }