summaryrefslogtreecommitdiffabout
path: root/lib/consumer.cc
Unidiff
Diffstat (limited to 'lib/consumer.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/consumer.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/consumer.cc b/lib/consumer.cc
index d578546..7881f5f 100644
--- a/lib/consumer.cc
+++ b/lib/consumer.cc
@@ -332,97 +332,97 @@ namespace opkele {
332 pcre_t bre(re_bre,PCRE_CASELESS); 332 pcre_t bre(re_bre,PCRE_CASELESS);
333 if(bre.exec(html,m1)>0) 333 if(bre.exec(html,m1)>0)
334 html.erase(m1.begin(0)); 334 html.erase(m1.begin(0));
335 pcre_t hdre(re_hdre,PCRE_CASELESS); 335 pcre_t hdre(re_hdre,PCRE_CASELESS);
336 if(hdre.exec(html,m1)<=0) 336 if(hdre.exec(html,m1)<=0)
337 throw bad_input(OPKELE_CP_ "failed to find <head>"); 337 throw bad_input(OPKELE_CP_ "failed to find <head>");
338 html.erase(0,m1.end(0)+1); 338 html.erase(0,m1.end(0)+1);
339 pcre_t lre(re_lre,PCRE_CASELESS), rre(re_rre,PCRE_CASELESS), hre(re_hre,PCRE_CASELESS); 339 pcre_t lre(re_lre,PCRE_CASELESS), rre(re_rre,PCRE_CASELESS), hre(re_hre,PCRE_CASELESS);
340 bool gotit = false; 340 bool gotit = false;
341 while( (!gotit) && lre.exec(html,m1)>=2 ) { 341 while( (!gotit) && lre.exec(html,m1)>=2 ) {
342 static const char *whitespace = " \t"; 342 static const char *whitespace = " \t";
343 string attrs(html,m1.begin(1),m1.length(1)); 343 string attrs(html,m1.begin(1),m1.length(1));
344 html.erase(0,m1.end(0)+1); 344 html.erase(0,m1.end(0)+1);
345 if(!( rre.exec(attrs,m1)>=2 && hre.exec(attrs,m2)>=2 )) 345 if(!( rre.exec(attrs,m1)>=2 && hre.exec(attrs,m2)>=2 ))
346 continue; 346 continue;
347 string rels(attrs,m1.begin(1),m1.length(1)); 347 string rels(attrs,m1.begin(1),m1.length(1));
348 for(string::size_type ns = rels.find_first_not_of(whitespace); 348 for(string::size_type ns = rels.find_first_not_of(whitespace);
349 ns!=string::npos; 349 ns!=string::npos;
350 ns=rels.find_first_not_of(whitespace,ns)) { 350 ns=rels.find_first_not_of(whitespace,ns)) {
351 string::size_type s = rels.find_first_of(whitespace,ns); 351 string::size_type s = rels.find_first_of(whitespace,ns);
352 string rel; 352 string rel;
353 if(s==string::npos) { 353 if(s==string::npos) {
354 rel.assign(rels,ns,string::npos); 354 rel.assign(rels,ns,string::npos);
355 ns=string::npos; 355 ns=string::npos;
356 }else{ 356 }else{
357 rel.assign(rels,ns,s-ns); 357 rel.assign(rels,ns,s-ns);
358 ns=s; 358 ns=s;
359 } 359 }
360 if(rel=="openid.server") { 360 if(rel=="openid.server") {
361 server.assign(attrs,m2.begin(1),m2.length(1)); 361 server.assign(attrs,m2.begin(1),m2.length(1));
362 if(!delegate.empty()) { 362 if(!delegate.empty()) {
363 gotit = true; 363 gotit = true;
364 break; 364 break;
365 } 365 }
366 }else if(rel=="openid.delegate") { 366 }else if(rel=="openid.delegate") {
367 delegate.assign(attrs,m2.begin(1),m2.length(1)); 367 delegate.assign(attrs,m2.begin(1),m2.length(1));
368 if(!server.empty()) { 368 if(!server.empty()) {
369 gotit = true; 369 gotit = true;
370 break; 370 break;
371 } 371 }
372 } 372 }
373 if(ns==string::npos) break; 373 if(ns==string::npos) break;
374 } 374 }
375 } 375 }
376 if(server.empty()) 376 if(server.empty())
377 throw failed_assertion(OPKELE_CP_ "The location has no openid.server declaration"); 377 throw failed_assertion(OPKELE_CP_ "The location has no openid.server declaration");
378 } 378 }
379 379
380 assoc_t consumer_t::find_assoc(const string& server) { 380 assoc_t consumer_t::find_assoc(const string& /* server */) {
381 throw failed_lookup(OPKELE_CP_ "no find_assoc() provided"); 381 throw failed_lookup(OPKELE_CP_ "no find_assoc() provided");
382 } 382 }
383 383
384 string consumer_t::normalize(const string& url) { 384 string consumer_t::normalize(const string& url) {
385 string rv = url; 385 string rv = url;
386 // strip leading and trailing spaces 386 // strip leading and trailing spaces
387 string::size_type i = rv.find_first_not_of(" \t\r\n"); 387 string::size_type i = rv.find_first_not_of(" \t\r\n");
388 if(i==string::npos) 388 if(i==string::npos)
389 throw bad_input(OPKELE_CP_ "empty URL"); 389 throw bad_input(OPKELE_CP_ "empty URL");
390 if(i) 390 if(i)
391 rv.erase(0,i); 391 rv.erase(0,i);
392 i = rv.find_last_not_of(" \t\r\n"); 392 i = rv.find_last_not_of(" \t\r\n");
393 assert(i!=string::npos); 393 assert(i!=string::npos);
394 if(i<(rv.length()-1)) 394 if(i<(rv.length()-1))
395 rv.erase(i+1); 395 rv.erase(i+1);
396 // add missing http:// 396 // add missing http://
397 i = rv.find("://"); 397 i = rv.find("://");
398 if(i==string::npos) { // primitive. but do we need more? 398 if(i==string::npos) { // primitive. but do we need more?
399 rv.insert(0,"http://"); 399 rv.insert(0,"http://");
400 i = sizeof("http://")-1; 400 i = sizeof("http://")-1;
401 }else{ 401 }else{
402 i += sizeof("://")-1; 402 i += sizeof("://")-1;
403 } 403 }
404 string::size_type qm = rv.find('?',i); 404 string::size_type qm = rv.find('?',i);
405 string::size_type sl = rv.find('/',i); 405 string::size_type sl = rv.find('/',i);
406 if(qm!=string::npos) { 406 if(qm!=string::npos) {
407 if(sl==string::npos || sl>qm) 407 if(sl==string::npos || sl>qm)
408 rv.insert(qm,1,'/'); 408 rv.insert(qm,1,'/');
409 }else{ 409 }else{
410 if(sl==string::npos) 410 if(sl==string::npos)
411 rv += '/'; 411 rv += '/';
412 } 412 }
413 return rv; 413 return rv;
414 } 414 }
415 415
416 string consumer_t::canonicalize(const string& url) { 416 string consumer_t::canonicalize(const string& url) {
417 string rv = normalize(url); 417 string rv = normalize(url);
418 curl_t curl = curl_easy_init(); 418 curl_t curl = curl_easy_init();
419 if(!curl) 419 if(!curl)
420 throw exception_curl(OPKELE_CP_ "failed to curl_easy_init()"); 420 throw exception_curl(OPKELE_CP_ "failed to curl_easy_init()");
421 string html; 421 string html;
422 CURLcode r; 422 CURLcode r;
423 (r=curl_misc_sets(curl)) 423 (r=curl_misc_sets(curl))
424 || (r=curl_easy_setopt(curl,CURLOPT_URL,rv.c_str())) 424 || (r=curl_easy_setopt(curl,CURLOPT_URL,rv.c_str()))
425 || (r=curl_easy_setopt(curl,CURLOPT_NOBODY,1)) 425 || (r=curl_easy_setopt(curl,CURLOPT_NOBODY,1))
426 ; 426 ;
427 if(r) 427 if(r)
428 throw exception_curl(OPKELE_CP_ "failed to curl_easy_setopt()",r); 428 throw exception_curl(OPKELE_CP_ "failed to curl_easy_setopt()",r);