Пример #1
0
 /**
  * Starts the discovery process
  *
  * This method actually finds out which discovery method (XRI, Yadis of HTML)
  * should be used and delegates the actual discovery to the corresponding
  * _discovery* method
  *
  * @param string &$id OpenID identity URL
  * @param string &$server OpenID server URL
  * @param float &$version OpenID protocol version
  * @return bool
  */
 protected function _discovery(&$id, &$server, &$version)
 {
     $realId = $id;
     if ($this->_storage->getDiscoveryInfo($id, $realId, $server, $version, $expire)) {
         $id = $realId;
         return true;
     }
     $xriChars = array('=', '@', '+', '$', '!', '(');
     if (in_array(substr($id, 0, 1), $xriChars)) {
         //It is an XRI
         $xrds = $this->_httpRequest("https://xri.net/" . $id, "GET", array('query' => '', '_xrd_r' => 'application/xrds+xml'), $status);
         if ($status != 200 || !is_string($response)) {
             return false;
         }
         $return = $this->_discoveryXrds($xrds, $realId, $server, $version);
         $version = 2.0;
     } elseif (!($return = $this->_discoveryYadis($id, $realId, $server, $version))) {
         //If Yadis discovery fails, then HTML discovery should be tried
         $return = $this->_discoveryHtml($id, $server, $version);
     }
     if ($return) {
         $expire = time() + 60 * 60;
         $this->_storage->addDiscoveryInfo($id, $realId, $server, $version, $expire);
         $id = $realId;
         return true;
     } else {
         return false;
     }
 }
Пример #2
0
 /**
  * Performs discovery of identity and finds OpenID URL, OpenID server URL
  * and OpenID protocol version. Returns true on succees and false on
  * failure.
  *
  * @param string &$id OpenID identity URL
  * @param string &$server OpenID server URL
  * @param float &$version OpenID protocol version
  * @return bool
  * @todo OpenID 2.0 (7.3) XRI and Yadis discovery
  */
 protected function _discovery(&$id, &$server, &$version)
 {
     $realId = $id;
     if ($this->_storage->getDiscoveryInfo($id, $realId, $server, $version, $expire)) {
         $id = $realId;
         return true;
     }
     $response = $this->_httpRequest($id, 'GET', array(), $status);
     if ($status != 200 || !is_string($response)) {
         return false;
     }
     /* OpenID 2.0 (7.3) XRI and Yadis discovery */
     if (preg_match('/<meta[^>]*http-equiv=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?X-XRDS-Location[ \\t]*[^"\']*\\1[^>]*content=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
         $XRDS = $r[3];
         $version = 2.0;
         $response = $this->_httpRequest($XRDS);
         if (preg_match('/<URI>([^\\t]*)<\\/URI>/i', $response, $x)) {
             $server = $x[1];
             // $realId
             $realId = 'http://specs.openid.net/auth/2.0/identifier_select';
         } else {
             $this->_setError("Unable to get URI for XRDS discovery");
         }
     } else {
         if (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.provider[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
             $version = 2.0;
             $server = $r[3];
         } elseif (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.provider[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
             $version = 2.0;
             $server = $r[2];
         } elseif (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.server[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
             $version = 1.1;
             $server = $r[3];
         } elseif (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.server[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
             $version = 1.1;
             $server = $r[2];
         } else {
             return false;
         }
     }
     if ($version >= 2.0) {
         if (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.local_id[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[3];
         } elseif (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.local_id[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[2];
         }
     } else {
         if (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.delegate[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[3];
         } elseif (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.delegate[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[2];
         }
     }
     $expire = time() + 60 * 60;
     $this->_storage->addDiscoveryInfo($id, $realId, $server, $version, $expire);
     $id = $realId;
     return true;
 }
Пример #3
0
 /**
  * Performs discovery of identity and finds OpenID URL, OpenID server URL
  * and OpenID protocol version. Returns true on succees and false on
  * failure.
  *
  * @param string &$id OpenID identity URL
  * @param string &$server OpenID server URL
  * @param float &$version OpenID protocol version
  * @return bool
  * @todo OpenID 2.0 (7.3) XRI and Yadis discovery 
  */
 protected function _discovery(&$id, &$server, &$version)
 {
     $realId = $id;
     if ($this->_storage->getDiscoveryInfo($id, $realId, $server, $version, $expire)) {
         $id = $realId;
         return true;
     }
     /* TODO: OpenID 2.0 (7.3) XRI and Yadis discovery */
     /* HTML-based discovery */
     $response = $this->_httpRequest($id, 'GET', array(), $status);
     if ($status != 200 || !is_string($response)) {
         return false;
     }
     if (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.provider[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
         $version = 2.0;
         $server = $r[3];
     } else {
         if (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.provider[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
             $version = 2.0;
             $server = $r[2];
         } else {
             if (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.server[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
                 $version = 1.1;
                 $server = $r[3];
             } else {
                 if (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.server[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
                     $version = 1.1;
                     $server = $r[2];
                 } else {
                     return false;
                 }
             }
         }
     }
     if ($version >= 2.0) {
         if (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.local_id[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[3];
         } else {
             if (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid2.local_id[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
                 $realId = $r[2];
             }
         }
     } else {
         if (preg_match('/<link[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.delegate[ \\t]*[^"\']*\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[3];
         } else {
             if (preg_match('/<link[^>]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])[ \\t]*(?:[^ \\t"\']+[ \\t]+)*?openid.delegate[ \\t]*[^"\']*\\3[^>]*\\/?>/i', $response, $r)) {
                 $realId = $r[2];
             }
         }
     }
     $expire = time() + 60 * 60;
     $this->_storage->addDiscoveryInfo($id, $realId, $server, $version, $expire);
     $id = $realId;
     return true;
 }
Пример #4
0
 /**
  * Performs discovery of identity and finds OpenID URL, OpenID server URL
  * and OpenID protocol version. Returns true on succees and false on
  * failure.
  *
  * @param string &$id OpenID identity URL
  * @param string &$server OpenID server URL
  * @param float &$version OpenID protocol version
  * @return bool
  * @todo OpenID 2.0 (7.3) XRI and Yadis discovery 
  */
 protected function _discovery(&$id, &$server, &$version)
 {
     $realId = $id;
     if ($this->_storage->getDiscoveryInfo($id, $realId, $server, $version, $expire)) {
         $id = $realId;
         return true;
     }
     /* TODO: OpenID 2.0 (7.3) XRI and Yadis discovery */
     /* HTML-based discovery */
     $response = $this->_httpRequest($id);
     if (!is_string($response)) {
         return false;
     }
     if (preg_match('/<link[^>]*rel="openid2.provider"[^>]*href="([^"]+)"[^>]*\\/?>/i', $response, $r) || preg_match('/<link[^>]*href="([^"]+)"[^>]*rel="openid2.provider"[^>]*\\/?>/i', $response, $r)) {
         $version = 2.0;
     } else {
         if (!preg_match('/<link[^>]*rel="openid.server"[^>]*href="([^"]+)"[^>]*\\/?>/i', $response, $r) && !preg_match('/<link[^>]*href="([^"]+)"[^>]*rel="openid.server"[^>]*\\/?>/i', $response, $r)) {
             return false;
         }
         $version = 1.1;
     }
     $server = $r[1];
     if ($version >= 2.0) {
         if (preg_match('/<link[^>]*rel="openid2.local_id"[^>]*href="([^"]+)"[^>]*\\/?>/i', $response, $r) || preg_match('/<link[^>]*href="([^"]+)"[^>]*rel="openid2.local_id"[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[1];
         }
     } else {
         if (preg_match('/<link[^>]*rel="openid.delegate"[^>]*href="([^"]+)"[^>]*\\/?>/i', $response, $r) || preg_match('/<link[^>]*href="([^"]+)"[^>]*rel="openid.delegate"[^>]*\\/?>/i', $response, $r)) {
             $realId = $r[1];
         }
     }
     $expire = time() + 60 * 60;
     $this->_storage->addDiscoveryInfo($id, $realId, $server, $version, $expire);
     $id = $realId;
     return true;
 }