⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 discover.php

📁 简介:IceBB是一个强大
💻 PHP
📖 第 1 页 / 共 2 页
字号:
    $local_id = null;    foreach ($permitted_tags as $tag_name) {        $tags = $service->getElements($tag_name);        foreach ($tags as $tag) {            $content = $parser->content($tag);            if ($local_id === null) {                $local_id = $content;            } else if ($local_id != $content) {                return false;            }        }    }    return $local_id;}function filter_MatchesAnyOpenIDType(&$service){    $uris = $service->getTypes();    foreach ($uris as $uri) {        if (in_array($uri, Auth_OpenID_getOpenIDTypeURIs())) {            return true;        }    }    return false;}function Auth_OpenID_bestMatchingService($service, $preferred_types){    // Return the index of the first matching type, or something    // higher if no type matches.    //    // This provides an ordering in which service elements that    // contain a type that comes earlier in the preferred types list    // come before service elements that come later. If a service    // element has more than one type, the most preferred one wins.    foreach ($preferred_types as $index => $typ) {        if (in_array($typ, $service->type_uris)) {            return $index;        }    }    return count($preferred_types);}function Auth_OpenID_arrangeByType($service_list, $preferred_types){    // Rearrange service_list in a new list so services are ordered by    // types listed in preferred_types.  Return the new list.    // Build a list with the service elements in tuples whose    // comparison will prefer the one with the best matching service    $prio_services = array();    foreach ($service_list as $index => $service) {        $prio_services[] = array(Auth_OpenID_bestMatchingService($service,                                                        $preferred_types),                                 $index, $service);    }    sort($prio_services);    // Now that the services are sorted by priority, remove the sort    // keys from the list.    foreach ($prio_services as $index => $s) {        $prio_services[$index] = $prio_services[$index][2];    }    return $prio_services;}// Extract OP Identifier services.  If none found, return the rest,// sorted with most preferred first according to// OpenIDServiceEndpoint.openid_type_uris.//// openid_services is a list of OpenIDServiceEndpoint objects.//// Returns a list of OpenIDServiceEndpoint objects."""function Auth_OpenID_getOPOrUserServices($openid_services){    $op_services = Auth_OpenID_arrangeByType($openid_services,                                     array(Auth_OpenID_TYPE_2_0_IDP));    $openid_services = Auth_OpenID_arrangeByType($openid_services,                                     Auth_OpenID_getOpenIDTypeURIs());    if ($op_services) {        return $op_services;    } else {        return $openid_services;    }}function Auth_OpenID_makeOpenIDEndpoints($uri, $yadis_services){    $s = array();    if (!$yadis_services) {        return $s;    }    foreach ($yadis_services as $service) {        $type_uris = $service->getTypes();        $uris = $service->getURIs();        // If any Type URIs match and there is an endpoint URI        // specified, then this is an OpenID endpoint        if ($type_uris &&            $uris) {            foreach ($uris as $service_uri) {                $openid_endpoint = new Auth_OpenID_ServiceEndpoint();                if ($openid_endpoint->parseService($uri,                                                   $service_uri,                                                   $type_uris,                                                   $service)) {                    $s[] = $openid_endpoint;                }            }        }    }    return $s;}function Auth_OpenID_discoverWithYadis($uri, &$fetcher,              $endpoint_filter='Auth_OpenID_getOPOrUserServices',              $discover_function=null){    // Discover OpenID services for a URI. Tries Yadis and falls back    // on old-style <link rel='...'> discovery if Yadis fails.    // Might raise a yadis.discover.DiscoveryFailure if no document    // came back for that URI at all.  I don't think falling back to    // OpenID 1.0 discovery on the same URL will help, so don't bother    // to catch it.    if ($discover_function === null) {        $discover_function = array('Auth_Yadis_Yadis', 'discover');    }    $openid_services = array();    $response = call_user_func_array($discover_function,                                     array($uri, &$fetcher));    $yadis_url = $response->normalized_uri;    $yadis_services = array();    if ($response->isFailure()) {        return array($uri, array());    }    $openid_services = Auth_OpenID_ServiceEndpoint::fromXRDS(                                         $yadis_url,                                         $response->response_text);    if (!$openid_services) {        if ($response->isXRDS()) {            return Auth_OpenID_discoverWithoutYadis($uri,                                                    $fetcher);        }        // Try to parse the response as HTML to get OpenID 1.0/1.1        // <link rel="...">        $openid_services = Auth_OpenID_ServiceEndpoint::fromHTML(                                        $yadis_url,                                        $response->response_text);    }    $openid_services = call_user_func_array($endpoint_filter,                                            array(&$openid_services));    return array($yadis_url, $openid_services);}function Auth_OpenID_discoverURI($uri, &$fetcher){    $parsed = parse_url($uri);    if ($parsed && isset($parsed['scheme']) &&        isset($parsed['host'])) {        if (!in_array($parsed['scheme'], array('http', 'https'))) {            // raise DiscoveryFailure('URI scheme is not HTTP or HTTPS', None)            return array($uri, array());        }    } else {        $uri = 'http://' . $uri;    }    $uri = Auth_OpenID::normalizeUrl($uri);    return Auth_OpenID_discoverWithYadis($uri, $fetcher);}function Auth_OpenID_discoverWithoutYadis($uri, &$fetcher){    $http_resp = @$fetcher->get($uri);    if ($http_resp->status != 200) {        return array($uri, array());    }    $identity_url = $http_resp->final_url;    // Try to parse the response as HTML to get OpenID 1.0/1.1 <link    // rel="...">    $openid_services = Auth_OpenID_ServiceEndpoint::fromHTML(                                           $identity_url,                                           $http_resp->body);    return array($identity_url, $openid_services);}function Auth_OpenID_discoverXRI($iname, &$fetcher){    $resolver = new Auth_Yadis_ProxyResolver($fetcher);    list($canonicalID, $yadis_services) =        $resolver->query($iname,                         Auth_OpenID_getOpenIDTypeURIs(),                         array('filter_MatchesAnyOpenIDType'));    $openid_services = Auth_OpenID_makeOpenIDEndpoints($iname,                                                       $yadis_services);    $openid_services = Auth_OpenID_getOPOrUserServices($openid_services);    for ($i = 0; $i < count($openid_services); $i++) {        $openid_services[$i]->canonicalID = $canonicalID;        $openid_services[$i]->claimed_id = $canonicalID;        $openid_services[$i]->display_identifier = $iname;    }    // FIXME: returned xri should probably be in some normal form    return array($iname, $openid_services);}function Auth_OpenID_discover($uri, &$fetcher){    // If the fetcher (i.e., PHP) doesn't support SSL, we can't do    // discovery on an HTTPS URL.    if ($fetcher->isHTTPS($uri) && !$fetcher->supportsSSL()) {        return array($uri, array());    }    if (Auth_Yadis_identifierScheme($uri) == 'XRI') {        $result = Auth_OpenID_discoverXRI($uri, $fetcher);    } else {        $result = Auth_OpenID_discoverURI($uri, $fetcher);    }    // If the fetcher doesn't support SSL, we can't interact with    // HTTPS server URLs; remove those endpoints from the list.    if (!$fetcher->supportsSSL()) {        $http_endpoints = array();        list($new_uri, $endpoints) = $result;        foreach ($endpoints as $e) {            if (!$fetcher->isHTTPS($e->server_url)) {                $http_endpoints[] = $e;            }        }        $result = array($new_uri, $http_endpoints);    }    return $result;}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -