Add OpenID auth for editing pages
[busui.git] / lib / openid-php / Auth / Yadis / XRIRes.php
blob:a/lib/openid-php/Auth/Yadis/XRIRes.php -> blob:b/lib/openid-php/Auth/Yadis/XRIRes.php
  <?php
   
  /**
  * Code for using a proxy XRI resolver.
  */
   
  require_once 'Auth/Yadis/XRDS.php';
  require_once 'Auth/Yadis/XRI.php';
   
  class Auth_Yadis_ProxyResolver {
  function Auth_Yadis_ProxyResolver($fetcher, $proxy_url = null)
  {
  $this->fetcher = $fetcher;
  $this->proxy_url = $proxy_url;
  if (!$this->proxy_url) {
  $this->proxy_url = Auth_Yadis_getDefaultProxy();
  }
  }
   
  function queryURL($xri, $service_type = null)
  {
  // trim off the xri:// prefix
  $qxri = substr(Auth_Yadis_toURINormal($xri), 6);
  $hxri = $this->proxy_url . $qxri;
  $args = array(
  '_xrd_r' => 'application/xrds+xml'
  );
   
  if ($service_type) {
  $args['_xrd_t'] = $service_type;
  } else {
  // Don't perform service endpoint selection.
  $args['_xrd_r'] .= ';sep=false';
  }
   
  $query = Auth_Yadis_XRIAppendArgs($hxri, $args);
  return $query;
  }
   
  function query($xri, $service_types, $filters = array())
  {
  $services = array();
  $canonicalID = null;
  foreach ($service_types as $service_type) {
  $url = $this->queryURL($xri, $service_type);
  $response = $this->fetcher->get($url);
  if ($response->status != 200 and $response->status != 206) {
  continue;
  }
  $xrds = Auth_Yadis_XRDS::parseXRDS($response->body);
  if (!$xrds) {
  continue;
  }
  $canonicalID = Auth_Yadis_getCanonicalID($xri,
  $xrds);
   
  if ($canonicalID === false) {
  return null;
  }
   
  $some_services = $xrds->services($filters);
  $services = array_merge($services, $some_services);
  // TODO:
  // * If we do get hits for multiple service_types, we're
  // almost certainly going to have duplicated service
  // entries and broken priority ordering.
  }
  return array($canonicalID, $services);
  }
  }