summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2007-09-22 21:02:48 (UTC)
committer Michael Krelin <hacker@klever.net>2007-09-22 21:02:48 (UTC)
commit17dd1771421d1098a2ba8dc16ae381912cae64ef (patch) (side-by-side diff)
treee4a3c21ab8dad60ef746b6650e63ddb9d608742c
parent5cb71518360f865cd4448a083b5d481e6f356a3e (diff)
downloadlibopkele-17dd1771421d1098a2ba8dc16ae381912cae64ef.zip
libopkele-17dd1771421d1098a2ba8dc16ae381912cae64ef.tar.gz
libopkele-17dd1771421d1098a2ba8dc16ae381912cae64ef.tar.bz2
save a couple of ticks
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--lib/consumer.cc5
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/consumer.cc b/lib/consumer.cc
index df95b64..7f31d52 100644
--- a/lib/consumer.cc
+++ b/lib/consumer.cc
@@ -321,54 +321,53 @@ namespace opkele {
if(r)
throw exception_curl(OPKELE_CP_ "failed to curl_easy_setopt()",r);
r = curl_easy_perform(curl);
if(r && r!=CURLE_WRITE_ERROR)
throw exception_curl(OPKELE_CP_ "failed to curl_easy_perform()",r);
static const char *re_bre = "<\\s*body\\b", *re_hdre = "<\\s*head[^>]*>",
*re_lre = "<\\s*link\\b([^>]+)>",
*re_rre = "\\brel\\s*=\\s*['\"]\\s*([^'\"\\s]+)\\s*['\"]",
*re_hre = "\\bhref\\s*=\\s*['\"]\\s*([^'\"\\s]+)\\s*['\"]";
pcre_matches_t m1(3), m2(3);
pcre_t bre(re_bre,PCRE_CASELESS);
if(bre.exec(html,m1)>0)
html.erase(m1.begin(0));
pcre_t hdre(re_hdre,PCRE_CASELESS);
if(hdre.exec(html,m1)<=0)
throw bad_input(OPKELE_CP_ "failed to find <head>");
html.erase(0,m1.end(0)+1);
pcre_t lre(re_lre,PCRE_CASELESS), rre(re_rre,PCRE_CASELESS), hre(re_hre,PCRE_CASELESS);
while(lre.exec(html,m1)>=2) {
string attrs(html,m1.begin(1),m1.length(1));
html.erase(0,m1.end(0)+1);
if(!( rre.exec(attrs,m1)>=2 && hre.exec(attrs,m2)>=2 ))
continue;
string rel(attrs,m1.begin(1),m1.length(1));
- string href(attrs,m2.begin(1),m2.length(1));
if(rel=="openid.server") {
- server = href;
+ server.assign(attrs,m2.begin(1),m2.length(1));
if(!delegate.empty()) break;
}else if(rel=="openid.delegate") {
- delegate = href;
+ delegate.assign(attrs,m2.begin(1),m2.length(1));
if(!server.empty()) break;
}
}
if(server.empty())
throw failed_assertion(OPKELE_CP_ "The location has no openid.server declaration");
}
assoc_t consumer_t::find_assoc(const string& server) {
throw failed_lookup(OPKELE_CP_ "no find_assoc() provided");
}
string consumer_t::normalize(const string& url) {
string rv = url;
// strip leading and trailing spaces
string::size_type i = rv.find_first_not_of(" \t\r\n");
if(i==string::npos)
throw bad_input(OPKELE_CP_ "empty URL");
if(i)
rv.erase(0,i);
i = rv.find_last_not_of(" \t\r\n");
assert(i!=string::npos);
if(i<(rv.length()-1))
rv.erase(i+1);
// add missing http://