summaryrefslogtreecommitdiffabout
path: root/lib
Side-by-side diff
Diffstat (limited to 'lib') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/Makefile.am2
-rw-r--r--lib/message.cc (renamed from lib/openid_message.cc)94
2 files changed, 45 insertions, 51 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index e8bfbf5..9b25b42 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -23,12 +23,12 @@ libopkele_la_SOURCES = \
consumer.cc \
exception.cc \
extension.cc \
sreg.cc \
extension_chain.cc \
curl.cc expat.cc \
discovery.cc \
basic_rp.cc prequeue_rp.cc \
- openid_message.cc \
+ message.cc \
basic_op.cc verify_op.cc
libopkele_la_LDFLAGS = \
-version-info 2:0:0
diff --git a/lib/openid_message.cc b/lib/message.cc
index e244f43..78f20f4 100644
--- a/lib/openid_message.cc
+++ b/lib/message.cc
@@ -7,81 +7,51 @@
#include "config.h"
namespace opkele {
using std::input_iterator_tag;
using std::unary_function;
struct __om_copier : public unary_function<const string&,void> {
public:
- const basic_openid_message& from;
- basic_openid_message& to;
+ const basic_message& from;
+ basic_message& to;
- __om_copier(basic_openid_message& t,const basic_openid_message& f)
+ __om_copier(basic_message& t,const basic_message& f)
: from(f), to(t) { }
result_type operator()(argument_type f) {
to.set_field(f,from.get_field(f)); }
};
- basic_openid_message::basic_openid_message(const basic_openid_message& x) {
+ basic_message::basic_message(const basic_message& x) {
x.copy_to(*this);
}
- void basic_openid_message::copy_to(basic_openid_message& x) const {
+ void basic_message::copy_to(basic_message& x) const {
x.reset_fields();
for_each(fields_begin(),fields_end(),
__om_copier(x,*this) );
}
- void basic_openid_message::append_to(basic_openid_message& x) const {
+ void basic_message::append_to(basic_message& x) const {
for_each(fields_begin(),fields_end(),
__om_copier(x,*this) );
}
- struct __om_ns_finder : public unary_function<const string&,bool> {
- public:
- const basic_openid_message& om;
- const string& uri;
-
- __om_ns_finder(const basic_openid_message& m,
- const string& u) : om(m), uri(u) { }
-
- result_type operator()(argument_type f) {
- return
- (!strncmp(f.c_str(),"ns.",sizeof("ns.")-1))
- && om.get_field(f)==uri ;
- }
- };
-
- bool basic_openid_message::has_ns(const string& uri) const {
- fields_iterator ei = fields_end();
- fields_iterator i = find_if(fields_begin(),fields_end(),
- __om_ns_finder(*this,uri));
- return !(i==ei);
- }
- string basic_openid_message::get_ns(const string& uri) const {
- fields_iterator ei = fields_end();
- fields_iterator i = find_if(fields_begin(),fields_end(),
- __om_ns_finder(*this,uri));
- if(i==ei)
- throw failed_lookup(OPKELE_CP_ string("failed to find namespace ")+uri);
- return i->substr(3);
- }
-
struct __om_query_builder : public unary_function<const string&,void> {
public:
- const basic_openid_message& om;
+ const basic_message& om;
bool first;
string& rv;
const char *pfx;
- __om_query_builder(const char *p,string& r,const basic_openid_message& m)
+ __om_query_builder(const char *p,string& r,const basic_message& m)
: om(m), first(true), rv(r), pfx(p) {
for_each(om.fields_begin(),om.fields_end(),*this);
}
- __om_query_builder(const char *p,string& r,const basic_openid_message& m,const string& u)
+ __om_query_builder(const char *p,string& r,const basic_message& m,const string& u)
: om(m), first(true), rv(r), pfx(p) {
rv = u;
if(rv.find('?')==string::npos)
rv += '?';
else
first = false;
for_each(om.fields_begin(),om.fields_end(),*this);
}
@@ -93,35 +63,65 @@ namespace opkele {
rv += '&';
if(pfx) rv += pfx;
rv+= f;
rv += '=';
rv += util::url_encode(om.get_field(f));
}
};
- string basic_openid_message::append_query(const string& url,const char *pfx) const {
+ string basic_message::append_query(const string& url,const char *pfx) const {
string rv;
return __om_query_builder(pfx,rv,*this,url).rv;
}
- string basic_openid_message::query_string(const char *pfx) const {
+ string basic_message::query_string(const char *pfx) const {
string rv;
return __om_query_builder(pfx,rv,*this).rv;
}
- void basic_openid_message::reset_fields() {
+ void basic_message::reset_fields() {
throw not_implemented(OPKELE_CP_ "reset_fields() not implemented");
}
- void basic_openid_message::set_field(const string&,const string&) {
+ void basic_message::set_field(const string&,const string&) {
throw not_implemented(OPKELE_CP_ "set_field() not implemented");
}
- void basic_openid_message::reset_field(const string&) {
+ void basic_message::reset_field(const string&) {
throw not_implemented(OPKELE_CP_ "reset_field() not implemented");
}
+ struct __om_ns_finder : public unary_function<const string&,bool> {
+ public:
+ const basic_openid_message& om;
+ const string& uri;
+
+ __om_ns_finder(const basic_openid_message& m,
+ const string& u) : om(m), uri(u) { }
+
+ result_type operator()(argument_type f) {
+ return
+ (!strncmp(f.c_str(),"ns.",sizeof("ns.")-1))
+ && om.get_field(f)==uri ;
+ }
+ };
+
+ bool basic_openid_message::has_ns(const string& uri) const {
+ fields_iterator ei = fields_end();
+ fields_iterator i = find_if(fields_begin(),fields_end(),
+ __om_ns_finder(*this,uri));
+ return !(i==ei);
+ }
+ string basic_openid_message::get_ns(const string& uri) const {
+ fields_iterator ei = fields_end();
+ fields_iterator i = find_if(fields_begin(),fields_end(),
+ __om_ns_finder(*this,uri));
+ if(i==ei)
+ throw failed_lookup(OPKELE_CP_ string("failed to find namespace ")+uri);
+ return i->substr(3);
+ }
+
void basic_openid_message::from_keyvalues(const string& kv) {
reset_fields();
string::size_type p = 0;
while(true) {
string::size_type co = kv.find(':',p);
if(co==string::npos)
break;
#ifndef POSTELS_LAW
@@ -235,22 +235,16 @@ namespace opkele {
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();
}
const string& openid_message_t::get_field(const string& n) const {
const_iterator i=find(n);
if(i==end())
throw failed_lookup(OPKELE_CP_ n+": no such field");
return i->second;