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
@@ -15,20 +15,20 @@ libopkele_la_LIBADD = \
${KONFORKA_LIBS} ${TIDY_LIBS}
libopkele_la_SOURCES = \
params.cc \
util.cc \
server.cc \
secret.cc \
data.cc \
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
@@ -1,135 +1,135 @@
#include <cassert>
#include <opkele/types.h>
#include <opkele/exception.h>
#include <opkele/util.h>
#include <opkele/debug.h>
#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);
}
result_type operator()(argument_type f) {
if(first)
first = false;
else
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
string::size_type nl = kv.find('\n',co+1);
if(nl==string::npos)
throw bad_input(OPKELE_CP_ "malformed input");
if(nl>co)
insert(value_type(kv.substr(p,co-p),kv.substr(co+1,nl-co-1)));
p = nl+1;
#else /* POSTELS_LAW */
string::size_type lb = kv.find_first_of("\r\n",co+1);
@@ -227,38 +227,32 @@ namespace opkele {
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();
}
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;
}
openid_message_t::fields_iterator openid_message_t::fields_begin() const {
return util::map_keys_iterator<const_iterator,string,const string&,const string*>(begin(),end());
}
openid_message_t::fields_iterator openid_message_t::fields_end() const {
return util::map_keys_iterator<const_iterator,string,const string&,const string*>(end(),end());
}