Auth/OpenID/Discover.php-Dateireferenz

gehe zum Quellcode dieser Datei

Datenstrukturen

class  Auth_OpenID_ServiceEndpoint

Aufzählungen

enum  Auth_OpenID_XMLNS_1_0
enum  Auth_OpenID_TYPE_1_2
enum  Auth_OpenID_TYPE_1_1
enum  Auth_OpenID_TYPE_1_0
enum  Auth_OpenID_TYPE_2_0_IDP
enum  Auth_OpenID_TYPE_2_0
enum  Auth_OpenID_RP_RETURN_TO_URL_TYPE

Funktionen

 Auth_OpenID_getOpenIDTypeURIs ()
 Auth_OpenID_findOPLocalIdentifier ($service, $type_uris)
 filter_MatchesAnyOpenIDType (&$service)
 Auth_OpenID_bestMatchingService ($service, $preferred_types)
 Auth_OpenID_arrangeByType ($service_list, $preferred_types)
 Auth_OpenID_getOPOrUserServices ($openid_services)
 Auth_OpenID_makeOpenIDEndpoints ($uri, $yadis_services)
 Auth_OpenID_discoverWithYadis ($uri, &$fetcher, $endpoint_filter='Auth_OpenID_getOPOrUserServices', $discover_function=null)
 Auth_OpenID_discoverURI ($uri, &$fetcher)
 Auth_OpenID_discoverWithoutYadis ($uri, &$fetcher)
 Auth_OpenID_discoverXRI ($iname, &$fetcher)
 Auth_OpenID_discover ($uri, &$fetcher)


Dokumentation der Aufzählungstypen

Definiert in Zeile 22 der Datei Discover.php.

Definiert in Zeile 19 der Datei Discover.php.

Definiert in Zeile 18 der Datei Discover.php.

Definiert in Zeile 17 der Datei Discover.php.

Definiert in Zeile 21 der Datei Discover.php.

Definiert in Zeile 20 der Datei Discover.php.

The OpenID and Yadis discovery implementation for OpenID 1.2.

Definiert in Zeile 14 der Datei Discover.php.


Dokumentation der Funktionen

Auth_OpenID_arrangeByType ( service_list,
preferred_types 
)

Definiert in Zeile 339 der Datei Discover.php.

00341 {
00342     // Rearrange service_list in a new list so services are ordered by
00343     // types listed in preferred_types.  Return the new list.
00344 
00345     // Build a list with the service elements in tuples whose
00346     // comparison will prefer the one with the best matching service
00347     $prio_services = array();
00348     foreach ($service_list as $index => $service) {
00349         $prio_services[] = array(Auth_OpenID_bestMatchingService($service,
00350                                                         $preferred_types),
00351                                  $index, $service);
00352     }
00353 
00354     sort($prio_services);
00355 
00356     // Now that the services are sorted by priority, remove the sort
00357     // keys from the list.
00358     foreach ($prio_services as $index => $s) {
00359         $prio_services[$index] = $prio_services[$index][2];
00360     }
00361 
00362     return $prio_services;

Auth_OpenID_bestMatchingService ( service,
preferred_types 
)

Definiert in Zeile 320 der Datei Discover.php.

00322 {
00323     // Return the index of the first matching type, or something
00324     // higher if no type matches.
00325     //
00326     // This provides an ordering in which service elements that
00327     // contain a type that comes earlier in the preferred types list
00328     // come before service elements that come later. If a service
00329     // element has more than one type, the most preferred one wins.
00330 
00331     foreach ($preferred_types as $index => $typ) {
00332         if (in_array($typ, $service->type_uris)) {
00333             return $index;
00334         }
00335     }
00336 
00337     return count($preferred_types);

Auth_OpenID_discover ( uri,
&$  fetcher 
)

Definiert in Zeile 515 der Datei Discover.php.

00517 {
00518     // If the fetcher (i.e., PHP) doesn't support SSL, we can't do
00519     // discovery on an HTTPS URL.
00520     if ($fetcher->isHTTPS($uri) && !$fetcher->supportsSSL()) {
00521         return array($uri, array());
00522     }
00523 
00524     if (Auth_Yadis_identifierScheme($uri) == 'XRI') {
00525         $result = Auth_OpenID_discoverXRI($uri, $fetcher);
00526     } else {
00527         $result = Auth_OpenID_discoverURI($uri, $fetcher);
00528     }
00529 
00530     // If the fetcher doesn't support SSL, we can't interact with
00531     // HTTPS server URLs; remove those endpoints from the list.
00532     if (!$fetcher->supportsSSL()) {
00533         $http_endpoints = array();
00534         list($new_uri, $endpoints) = $result;
00535 
00536         foreach ($endpoints as $e) {
00537             if (!$fetcher->isHTTPS($e->server_url)) {
00538                 $http_endpoints[] = $e;
00539             }
00540         }
00541 
00542         $result = array($new_uri, $http_endpoints);
00543     }
00544 
00545     return $result;

Auth_OpenID_discoverURI ( uri,
&$  fetcher 
)

Definiert in Zeile 467 der Datei Discover.php.

00469 {
00470     $uri = Auth_OpenID::normalizeUrl($uri);
00471     return Auth_OpenID_discoverWithYadis($uri, $fetcher);

Auth_OpenID_discoverWithoutYadis ( uri,
&$  fetcher 
)

Definiert in Zeile 473 der Datei Discover.php.

00475 {
00476     $http_resp = @$fetcher->get($uri);
00477 
00478     if ($http_resp->status != 200 and $http_resp->status != 206) {
00479         return array($uri, array());
00480     }
00481 
00482     $identity_url = $http_resp->final_url;
00483 
00484     // Try to parse the response as HTML to get OpenID 1.0/1.1 <link
00485     // rel="...">
00486     $openid_services = Auth_OpenID_ServiceEndpoint::fromHTML(
00487                                            $identity_url,
00488                                            $http_resp->body);
00489 
00490     return array($identity_url, $openid_services);

Auth_OpenID_discoverWithYadis ( uri,
&$  fetcher,
endpoint_filter = 'Auth_OpenID_getOPOrUserServices',
discover_function = null 
)

Definiert in Zeile 417 der Datei Discover.php.

00421 {
00422     // Discover OpenID services for a URI. Tries Yadis and falls back
00423     // on old-style <link rel='...'> discovery if Yadis fails.
00424 
00425     // Might raise a yadis.discover.DiscoveryFailure if no document
00426     // came back for that URI at all.  I don't think falling back to
00427     // OpenID 1.0 discovery on the same URL will help, so don't bother
00428     // to catch it.
00429     if ($discover_function === null) {
00430         $discover_function = array('Auth_Yadis_Yadis', 'discover');
00431     }
00432 
00433     $openid_services = array();
00434 
00435     $response = call_user_func_array($discover_function,
00436                                      array($uri, &$fetcher));
00437 
00438     $yadis_url = $response->normalized_uri;
00439     $yadis_services = array();
00440 
00441     if ($response->isFailure()) {
00442         return array($uri, array());
00443     }
00444 
00445     $openid_services = Auth_OpenID_ServiceEndpoint::fromXRDS(
00446                                          $yadis_url,
00447                                          $response->response_text);
00448 
00449     if (!$openid_services) {
00450         if ($response->isXRDS()) {
00451             return Auth_OpenID_discoverWithoutYadis($uri,
00452                                                     $fetcher);
00453         }
00454 
00455         // Try to parse the response as HTML to get OpenID 1.0/1.1
00456         // <link rel="...">
00457         $openid_services = Auth_OpenID_ServiceEndpoint::fromHTML(
00458                                         $yadis_url,
00459                                         $response->response_text);
00460     }
00461 
00462     $openid_services = call_user_func_array($endpoint_filter,
00463                                             array(&$openid_services));
00464 
00465     return array($yadis_url, $openid_services);

Auth_OpenID_discoverXRI ( iname,
&$  fetcher 
)

Definiert in Zeile 492 der Datei Discover.php.

00494 {
00495     $resolver = new Auth_Yadis_ProxyResolver($fetcher);
00496     list($canonicalID, $yadis_services) =
00497         $resolver->query($iname,
00498                          Auth_OpenID_getOpenIDTypeURIs(),
00499                          array('filter_MatchesAnyOpenIDType'));
00500 
00501     $openid_services = Auth_OpenID_makeOpenIDEndpoints($iname,
00502                                                        $yadis_services);
00503 
00504     $openid_services = Auth_OpenID_getOPOrUserServices($openid_services);
00505 
00506     for ($i = 0; $i < count($openid_services); $i++) {
00507         $openid_services[$i]->canonicalID = $canonicalID;
00508         $openid_services[$i]->claimed_id = $canonicalID;
00509         $openid_services[$i]->display_identifier = $iname;
00510     }
00511 
00512     // FIXME: returned xri should probably be in some normal form
00513     return array($iname, $openid_services);

Auth_OpenID_findOPLocalIdentifier ( service,
type_uris 
)

Definiert in Zeile 262 der Datei Discover.php.

00264 {
00265     // Extract a openid:Delegate value from a Yadis Service element.
00266     // If no delegate is found, returns null.  Returns false on
00267     // discovery failure (when multiple delegate/localID tags have
00268     // different values).
00269 
00270     $service->parser->registerNamespace('openid',
00271                                         Auth_OpenID_XMLNS_1_0);
00272 
00273     $service->parser->registerNamespace('xrd',
00274                                         Auth_Yadis_XMLNS_XRD_2_0);
00275 
00276     $parser =& $service->parser;
00277 
00278     $permitted_tags = array();
00279 
00280     if (in_array(Auth_OpenID_TYPE_1_1, $type_uris) ||
00281         in_array(Auth_OpenID_TYPE_1_0, $type_uris)) {
00282         $permitted_tags[] = 'openid:Delegate';
00283     }
00284 
00285     if (in_array(Auth_OpenID_TYPE_2_0, $type_uris)) {
00286         $permitted_tags[] = 'xrd:LocalID';
00287     }
00288 
00289     $local_id = null;
00290 
00291     foreach ($permitted_tags as $tag_name) {
00292         $tags = $service->getElements($tag_name);
00293 
00294         foreach ($tags as $tag) {
00295             $content = $parser->content($tag);
00296 
00297             if ($local_id === null) {
00298                 $local_id = $content;
00299             } else if ($local_id != $content) {
00300                 return false;
00301             }
00302         }
00303     }
00304 
00305     return $local_id;

Auth_OpenID_getOpenIDTypeURIs (  ) 

Definiert in Zeile 24 der Datei Discover.php.

Auth_OpenID_getOPOrUserServices ( openid_services  ) 

Definiert in Zeile 371 der Datei Discover.php.

00373 {
00374     $op_services = Auth_OpenID_arrangeByType($openid_services,
00375                                      array(Auth_OpenID_TYPE_2_0_IDP));
00376 
00377     $openid_services = Auth_OpenID_arrangeByType($openid_services,
00378                                      Auth_OpenID_getOpenIDTypeURIs());
00379 
00380     if ($op_services) {
00381         return $op_services;
00382     } else {
00383         return $openid_services;
00384     }

Auth_OpenID_makeOpenIDEndpoints ( uri,
yadis_services 
)

Definiert in Zeile 386 der Datei Discover.php.

00388 {
00389     $s = array();
00390 
00391     if (!$yadis_services) {
00392         return $s;
00393     }
00394 
00395     foreach ($yadis_services as $service) {
00396         $type_uris = $service->getTypes();
00397         $uris = $service->getURIs();
00398 
00399         // If any Type URIs match and there is an endpoint URI
00400         // specified, then this is an OpenID endpoint
00401         if ($type_uris &&
00402             $uris) {
00403             foreach ($uris as $service_uri) {
00404                 $openid_endpoint = new Auth_OpenID_ServiceEndpoint();
00405                 if ($openid_endpoint->parseService($uri,
00406                                                    $service_uri,
00407                                                    $type_uris,
00408                                                    $service)) {
00409                     $s[] = $openid_endpoint;
00410                 }
00411             }
00412         }
00413     }
00414 
00415     return $s;

filter_MatchesAnyOpenIDType ( &$  service  ) 

Definiert in Zeile 307 der Datei Discover.php.

00309 {
00310     $uris = $service->getTypes();
00311 
00312     foreach ($uris as $uri) {
00313         if (in_array($uri, Auth_OpenID_getOpenIDTypeURIs())) {
00314             return true;
00315         }
00316     }
00317 
00318     return false;

Copyright © 2003 - 2009 MyOOS [Shopsystem]. All rights reserved.
MyOOS [Shopsystem] is Free Software released under the GNU/GPL License.

Webmaster: info@r23.de (Impressum)
doxygen