-rw-r--r-- | lib/openid_message.cc | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/openid_message.cc b/lib/openid_message.cc index 521ea85..588bd62 100644 --- a/lib/openid_message.cc +++ b/lib/openid_message.cc @@ -150,46 +150,50 @@ namespace opkele { __om_kv_outputter(const basic_openid_message& m,ostream& s) : om(m), os(s) { } result_type operator()(argument_type f) { os << f << ':' << om.get_field(f) << '\n'; } }; void basic_openid_message::to_keyvalues(ostream& o) const { for_each(fields_begin(),fields_end(),__om_kv_outputter(*this,o)); } struct __om_html_outputter : public unary_function<const string&,void> { public: const basic_openid_message& om; ostream& os; + const char *pfx; - __om_html_outputter(const basic_openid_message& m,ostream& s) - : om(m), os(s) { } + __om_html_outputter(const basic_openid_message& m,ostream& s,const char *p=0) + : om(m), os(s), pfx(p) { } result_type operator()(argument_type f) { os << "<input type=\"hidden\"" - " name=\"" << util::attr_escape(f) << "\"" + " name=\""; + if(pfx) + os << util::attr_escape(pfx); + os << util::attr_escape(f) << "\"" " value=\"" << util::attr_escape(om.get_field(f)) << "\" />"; } }; - void basic_openid_message::to_htmlhiddens(ostream& o) const { - for_each(fields_begin(),fields_end(),__om_html_outputter(*this,o)); + void basic_openid_message::to_htmlhiddens(ostream& o,const char* pfx) const { + for_each(fields_begin(),fields_end(),__om_html_outputter(*this,o,pfx)); } void basic_openid_message::add_to_signed(const string& fields) { string::size_type fnc = fields.find_first_not_of(","); if(fnc==string::npos) throw bad_input(OPKELE_CP_ "Trying to add nothing in particular to the list of signed fields"); string signeds; try { 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+= ','; |