Пример #1
0
function detect_xml($r, &$out)
{
    global $__Auth_Yadis_xml_extensions;
    $out .= $r->h2('XML Support');
    // Try to get an XML extension.
    $ext = Auth_Yadis_getXMLParser();
    if ($ext !== null) {
        $out .= $r->p('XML parsing support is present using the ' . $r->b(get_class($ext)) . ' interface.');
        return true;
    } else {
        $out .= $r->p('XML parsing support is absent; please install one ' . 'of the following PHP extensions:');
        foreach ($__Auth_Yadis_xml_extensions as $name => $cls) {
            $out .= "<li>" . $r->b($name) . "</li>";
        }
        return false;
    }
}
Пример #2
0
 function _checkForm($html, $message_, $action_url, $form_tag_attrs, $submit_text)
 {
     $parser =& Auth_Yadis_getXMLParser();
     // Parse HTML source
     $this->assertTrue($parser->init($html, array()));
     // Get root element
     $form = $parser->evalXPath('/form[1]');
     $this->assertTrue(count($form) == 1);
     $form = $form[0];
     // Check required form attributes
     $form_attrs = $parser->attributes($form);
     foreach ($this->required_form_attrs as $k => $v) {
         $this->assertTrue($form_attrs[$k] == $v);
     }
     // Check extra form attributes
     foreach ($form_tag_attrs as $k => $v) {
         // Skip attributes that already passed the required
         // attribute check, since they should be ignored by the
         // form generation code.
         if (in_array($k, array_keys($this->required_form_attrs))) {
             continue;
         }
         $this->assertTrue($form_attrs[$k] == $v, "Form attr {$k} is " . $form_attrs[$k] . " (expected {$v})");
     }
     // Check hidden fields against post args
     $hiddens = array();
     $input_elements = $parser->evalXPath('input', $form);
     foreach ($input_elements as $e) {
         $attrs = $parser->attributes($e);
         if (strtoupper($attrs['type']) == 'HIDDEN') {
             $hiddens[] = $e;
         }
     }
     // For each post arg, make sure there is a hidden with that
     // value.  Make sure there are no other hiddens.
     $postargs = $message_->toPostArgs();
     foreach ($postargs as $name => $value) {
         $found = false;
         foreach ($hiddens as $e) {
             $attrs = $parser->attributes($e);
             if ($attrs['name'] == $name) {
                 $this->assertTrue($attrs['value'] == $value);
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $this->fail("Post arg {$name} not found in form");
         }
     }
     $keys = array_keys($postargs);
     foreach ($hiddens as $e) {
         $attrs = $parser->attributes($e);
         $this->assertTrue(in_array($attrs['name'], $keys));
     }
     // Check action URL
     $this->assertTrue($form_attrs['action'] == $action_url);
     // Check submit text
     $submits = array();
     foreach ($input_elements as $e) {
         $attrs = $parser->attributes($e);
         if (strtoupper($attrs['type']) == 'SUBMIT') {
             $submits[] = $e;
         }
     }
     $this->assertTrue(count($submits) == 1);
     $attrs = $parser->attributes($submits[0]);
     $this->assertTrue($attrs['value'] == $submit_text);
 }
Пример #3
0
 /**
  * Parse an XML string (XRDS document) and return either a
  * Auth_Yadis_XRDS object or null, depending on whether the
  * XRDS XML is valid.
  *
  * @param string $xml_string An XRDS XML string.
  * @return mixed $xrds An instance of Auth_Yadis_XRDS or null,
  * depending on the validity of $xml_string
  */
 function &parseXRDS($xml_string, $extra_ns_map = null)
 {
     $_null = null;
     if (!$xml_string) {
         return $_null;
     }
     $parser = Auth_Yadis_getXMLParser();
     $ns_map = Auth_Yadis_getNSMap();
     if ($extra_ns_map && is_array($extra_ns_map)) {
         $ns_map = array_merge($ns_map, $extra_ns_map);
     }
     if (!($parser && $parser->init($xml_string, $ns_map))) {
         return $_null;
     }
     // Try to get root element.
     $root = $parser->evalXPath('/xrds:XRDS[1]');
     if (!$root) {
         return $_null;
     }
     if (is_array($root)) {
         $root = $root[0];
     }
     $attrs = $parser->attributes($root);
     if (array_key_exists('xmlns:xrd', $attrs) && $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) {
         return $_null;
     } else {
         if (array_key_exists('xmlns', $attrs) && preg_match('/xri/', $attrs['xmlns']) && $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) {
             return $_null;
         }
     }
     // Get the last XRD node.
     $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD');
     if (!$xrd_nodes) {
         return $_null;
     }
     $xrds = new Auth_Yadis_XRDS($parser, $xrd_nodes);
     return $xrds;
 }