/** Lance le serveur */ function run() { // racine du serveur a enregistrer qq part (pour l'instant ici) $root = '/blogmarks/servers/atom'; // On construit le tableau d'arguments pour les filtres $args = array(); // on extrait l'URI relative $uri = $_SERVER['REQUEST_URI']; //***** DEBUG echo $uri."<br/>".$root; $uri = ereg_replace($root, '', $uri); $args['uri'] = $uri; $args['method'] = $_SERVER['REQUEST_METHOD']; $args['content'] = $_GLOBALS['HTTP_RAW_POST_DATA']; // On filtre la requête $filter = new FilterChainRoot(array(new ContextBuilderFilter(), new AuthenticateFilter())); $ret = $filter->execute(&$args); if (BlogMarks::isError($ret)) { // erreur de filtre echo $ret->getMessage(); return; } // **** DEBUG echo "objet : " . $args['object'] . "<br/>"; echo "method : " . $args['method'] . "<br/>"; echo "tag : " . $args['tag'] . "<br/>"; echo "user : "******"<br/>"; echo "id : " . $args['id'] . "<br/>"; echo "auth_str :" . $args['auth_str'] . "<br/>"; // ********** // On construit le controlleur selon le type d'objet de la requête $ctrlerFactory = new ControllerFactory(); $ctrler = $ctrlerFactory->createController($args['object']); if (BlogMarks::isError($ctrler)) { echo $ctrler->getMessage(); exit(1); } // On lance le controlleur pour l'objet de la requête $response = $ctrler->execute($args); if (BlogMarks::isError($response)) { // erreur du controlleur de requête return; } // On applique le renderer atom a la reponse et on la renvoit $rendererFactory = new rendererFactory(); $renderer = $rendererFactory->createRenderer($args['object']); // GERER LA REPONSE HTTP echo "HTTP/1.1 200 Ok\n"; $response->accept($renderer); echo $renderer->render(); }
function execute($arg) { // Récupère la ligne X-WSSE du header $headers = apache_request_headers(); $auth_line = ''; foreach ($headers as $header => $value) { if ($header == "X-WSSE") { $auth_line = $value; } } if ($auth_line != '') { // on récupère les informations du header $pattern = 'Username="******", PasswordDigest="(.+)",'; $pattern .= ' Nonce="(.+)", Created="(.+)"'; if (ereg($pattern, $auth_line, $regs)) { $marker = new BlogMarks_Marker(); echo "authentifie ...\n"; $auth_str = $marker->authenticate($regs[1], $regs[2], $regs[3], $regs[4]); if (Blogmarks::isError($auth_str)) { echo "Error :" . $auth_str->getMessage() . "\n"; } $arg['auth_str'] = $auth_str; } else { return BlogMarks::raiseError("Erreur à la ligne X-WSSE : {$pattern} ne vérfifie pas {$auth_line}", 400); } } // passe au filtre suivant if ($this->_hasChild) { $tmp =& $this->_childFilter; return $tmp->execute($arg); } }
function execute($arg) { // Récupère la ligne X-WSSE du header $headers = apache_request_headers(); $auth_line = ''; foreach ($headers as $header => $value) { if ($header == "X-WSSE") { $auth_line = $value; } } if ($auth_line != '') { // on récupère les informations du header $pattern = 'Username="******", PasswordDigest="(.+)",'; $pattern .= ' Nonce="(.+)", Created="(.+)", Expires="(.+)"'; if (ereg($pattern, $auth_line, $regs)) { $auth = $arg['marker']->authenticate($regs[1], $regs[2], $regs[3], $regs[4], false); if (Blogmarks::isError($auth)) { return $auth; } } else { return BlogMarks::raiseError("Erreur à la ligne X-WSSE : {$pattern} ne vérfifie pas {$auth_line}", 400); } } // passe au filtre suivant if ($this->_hasChild) { $tmp =& $this->_childFilter; return $tmp->execute($arg); } }
/** Parse un document XML décrivant un Tag et renvoit un tableau de valeurs. */ function parseAtom($buffer) { $props = array(); // on construit le DOM à partir du flux XML if (!($dom = domxml_open_mem($buffer))) { return BlogMarks::raiseError('Impossible de créer le document DOM', 500); } // récupère l'élément racine (tag) $root = $dom->document_element(); // enregistre la langue du tag $props['lang'] = $root->get_attribute('lang'); // enregistre le titre du tag $title = $root->get_elements_by_tagname('title'); $props['title'] = $title[0]->get_content(); // enregistre la description du tag $summary = $root->get_elements_by_tagname('summary'); $props['summary'] = $summary[0]->get_content(); // enregistre le nom du tag parent $subTagOf = $root->get_elements_by_tagname('subTagOf'); if (!($subTagOf = array())) { $props['subTagOf'] = $subTagOf[0]->get_content(); } return $props; }