author | Michael Krelin <hacker@klever.net> | 2007-12-02 23:06:54 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2007-12-02 23:06:54 (UTC) |
commit | 60fdaff7888b455b4d07eadc905cefd20f1ddd3c (patch) (side-by-side diff) | |
tree | a7f7301abbc69401b8aa3b0f5f509552cb5e5ce9 | |
parent | 262f1579f0a9138a01f06afea06d00155cefd4b5 (diff) | |
download | libopkele-60fdaff7888b455b4d07eadc905cefd20f1ddd3c.zip libopkele-60fdaff7888b455b4d07eadc905cefd20f1ddd3c.tar.gz libopkele-60fdaff7888b455b4d07eadc905cefd20f1ddd3c.tar.bz2 |
more robust discovery
if no service found in yadis document, but it is found in html, use
html-discovered service.
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | lib/openid_service_resolver.cc | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/openid_service_resolver.cc b/lib/openid_service_resolver.cc index 5f82955..505e5b2 100644 --- a/lib/openid_service_resolver.cc +++ b/lib/openid_service_resolver.cc @@ -243,9 +243,8 @@ namespace opkele { true ); if(auth_info.canonical_id.empty() || auth_info.auth_SEP.xrd_Type.empty() ) throw opkele::failed_lookup(OPKELE_CP_ "no OpenID service for XRI found"); - return auth_info; }else{ const char *np = nid.c_str(); if( (strncasecmp(np,"http",4) || strncmp( tolower(*(np+4))=='s'? np+5 : np+4, "://", 3)) @@ -270,25 +269,30 @@ namespace opkele { string canonicalized_id = util::rfc_3986_normalize_uri(eu); if(xrds_location.empty()) { if(auth_info.auth_SEP.xrd_Type.empty()) { if(html_SEP.xrd_URI.empty()) - throw opkele::failed_lookup(OPKELE_CP_ "no OpenID service discovered"); + throw opkele::failed_lookup(OPKELE_CP_ "no OpenID 1.0 service discovered"); auth_info.auth_SEP = html_SEP; auth_info.auth_SEP.xrd_Type.clear(); auth_info.auth_SEP.xrd_Type.insert( STURI_OPENID10 ); auth_info.canonical_id = canonicalized_id; }else{ if(auth_info.canonical_id.empty()) auth_info.canonical_id = canonicalized_id; } - return auth_info; }else{ discover_service(xrds_location); - if(auth_info.auth_SEP.xrd_Type.empty()) - throw opkele::failed_lookup(OPKELE_CP_ "no OpenID service found in Yadis document"); + if(auth_info.auth_SEP.xrd_Type.empty()) { + if(html_SEP.xrd_URI.empty()) + throw opkele::failed_lookup(OPKELE_CP_ "no OpenID 1.0 service discovered"); + auth_info.auth_SEP = html_SEP; + auth_info.auth_SEP.xrd_Type.clear(); auth_info.auth_SEP.xrd_Type.insert( STURI_OPENID10 ); + auth_info.canonical_id = canonicalized_id; + }else{ if(auth_info.canonical_id.empty()) auth_info.canonical_id = canonicalized_id; - return auth_info; } } } + return auth_info; + } } |