summaryrefslogtreecommitdiffabout
path: root/lib/openid_message.cc
Side-by-side diff
Diffstat (limited to 'lib/openid_message.cc') (more/less context) (show whitespace changes)
-rw-r--r--lib/openid_message.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/openid_message.cc b/lib/openid_message.cc
index 588bd62..75e59b3 100644
--- a/lib/openid_message.cc
+++ b/lib/openid_message.cc
@@ -192,52 +192,54 @@ namespace opkele {
signeds = get_field("signed");
string::size_type lnc = signeds.find_last_not_of(",");
if(lnc==string::npos)
signeds.assign(fields,fnc,fields.size()-fnc);
else{
string::size_type ss = signeds.size();
if(lnc==(ss-1)) {
signeds+= ',';
signeds.append(fields,fnc,fields.size()-fnc);
}else{
if(lnc<(ss-2))
signeds.replace(lnc+2,ss-lnc-2,
fields,fnc,fields.size()-fnc);
else
signeds.append(fields,fnc,fields.size()-fnc);
}
}
}catch(failed_lookup&) {
signeds.assign(fields,fnc,fields.size()-fnc);
}
set_field("signed",signeds);
}
string basic_openid_message::find_ns(const string& uri,const char *pfx) const {
- if(has_field("ns"))
+ try {
return get_ns(uri);
+ }catch(failed_lookup&) {
return pfx;
}
+ }
string basic_openid_message::allocate_ns(const string& uri,const char *pfx) {
if(!has_field("ns"))
return pfx;
if(has_ns(uri))
throw bad_input(OPKELE_CP_ "OpenID message already contains namespace");
string rv = pfx;
if(has_field("ns."+rv)) {
string::reference c=rv[rv.length()];
for(c='a';c<='z' && has_field("ns."+rv);++c);
if(c=='z')
throw exception(OPKELE_CP_ "Failed to allocate namespace");
}
set_field("ns."+rv,uri);
return rv;
}
void openid_message_t::copy_to(basic_openid_message& x) const {
x.reset_fields();
for(const_iterator i=begin();i!=end();++i)
x.set_field(i->first,i->second);
}
bool openid_message_t::has_field(const string& n) const {
return find(n)!=end();