summaryrefslogtreecommitdiffabout
path: root/lib
authorMichael Krelin <hacker@klever.net>2008-02-04 22:39:59 (UTC)
committer Michael Krelin <hacker@klever.net>2008-02-04 22:39:59 (UTC)
commit9163a26ec8839a31df888920418280a62ebc5595 (patch) (side-by-side diff)
tree55339b4ecf0a3f24817eb5cc1b0b24f831ac895b /lib
parentc0eeee1cfd41d0f5f6ff6ac3d6fe021421376a69 (diff)
downloadlibopkele-9163a26ec8839a31df888920418280a62ebc5595.zip
libopkele-9163a26ec8839a31df888920418280a62ebc5595.tar.gz
libopkele-9163a26ec8839a31df888920418280a62ebc5595.tar.bz2
reworked extensions framework
* changed {checkid,id_res}_hook to {rp,op}_{checkid,id_res}_hook * deprecated older hooks, although implemented it in sreg and chain extensions * added extension processing to basic_op * added sreg to test OP Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (limited to 'lib') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/basic_op.cc5
-rw-r--r--lib/basic_rp.cc4
-rw-r--r--lib/extension.cc25
-rw-r--r--lib/extension_chain.cc27
-rw-r--r--lib/sreg.cc28
5 files changed, 67 insertions, 22 deletions
diff --git a/lib/basic_op.cc b/lib/basic_op.cc
index c89d1d7..9e2ea5a 100644
--- a/lib/basic_op.cc
+++ b/lib/basic_op.cc
@@ -195,5 +195,7 @@ namespace opkele {
verify_return_to();
+ if(ext) ext->op_checkid_hook(inm);
}
- basic_openid_message& basic_op::id_res(basic_openid_message& om) {
+ basic_openid_message& basic_op::id_res(basic_openid_message& om,
+ extension_t *ext) {
assert(assoc);
@@ -226,2 +228,3 @@ namespace opkele {
om.add_to_signed(ats);
+ if(ext) ext->op_id_res_hook(om);
om.set_field("sig",util::base64_signature(assoc,om));
diff --git a/lib/basic_rp.cc b/lib/basic_rp.cc
index a884583..bd45d99 100644
--- a/lib/basic_rp.cc
+++ b/lib/basic_rp.cc
@@ -131,3 +131,3 @@ namespace opkele {
} OPKELE_RETHROW
- if(ext) ext->checkid_hook(rv);
+ if(ext) ext->rp_checkid_hook(rv);
return rv;
@@ -277,3 +277,3 @@ namespace opkele {
}
- if(ext) ext->id_res_hook(om,signeds);
+ if(ext) ext->rp_id_res_hook(om,signeds);
}
diff --git a/lib/extension.cc b/lib/extension.cc
index 6451249..f7aaea5 100644
--- a/lib/extension.cc
+++ b/lib/extension.cc
@@ -5,11 +5,22 @@ namespace opkele {
+ void extension_t::rp_checkid_hook(basic_openid_message&) {
+ throw not_implemented(OPKELE_CP_ "RP checkid_* hook not implemented"); }
+ void extension_t::rp_id_res_hook(const basic_openid_message&,
+ const basic_openid_message&) {
+ throw not_implemented(OPKELE_CP_ "RP id_res hook not implemented"); }
+
+ void extension_t::op_checkid_hook(const basic_openid_message&) {
+ throw not_implemented(OPKELE_CP_ "OP checkid_* hook not implemented"); }
+ void extension_t::op_id_res_hook(basic_openid_message& om) {
+ throw not_implemented(OPKELE_CP_ "OP id_res hook not implemented"); }
+
+
void extension_t::checkid_hook(basic_openid_message&) {
- throw not_implemented(OPKELE_CP_ "Consumer checkid_hook not implemented");
- }
- void extension_t::id_res_hook(const basic_openid_message&,const basic_openid_message&) {
- throw not_implemented(OPKELE_CP_ "Consumer id_res_hook not implemented");
- }
+ throw not_implemented(OPKELE_CP_ "deprecated consumer checkid_* hook not implemented"); }
+ void extension_t::id_res_hook(const basic_openid_message&,
+ const basic_openid_message&) {
+ throw not_implemented(OPKELE_CP_ "deprecated consumer id_res hook not implemented"); }
+
void extension_t::checkid_hook(const basic_openid_message&,basic_openid_message&) {
- throw not_implemented(OPKELE_CP_ "Server checkid_hook not implemented");
- }
+ throw not_implemented(OPKELE_CP_ "deprecated server checkid hook not implemented"); }
}
diff --git a/lib/extension_chain.cc b/lib/extension_chain.cc
index 5c2afd9..5483740 100644
--- a/lib/extension_chain.cc
+++ b/lib/extension_chain.cc
@@ -5,11 +5,22 @@ namespace opkele {
+ void extension_chain_t::rp_checkid_hook(basic_openid_message& om) {
+ for(iterator i=begin();i!=end();++i) (*i)->rp_checkid_hook(om); }
+ void extension_chain_t::rp_id_res_hook(const basic_openid_message& om,
+ const basic_openid_message& sp) {
+ for(iterator i=begin();i!=end();++i) (*i)->rp_id_res_hook(om,sp); }
+
+ void extension_chain_t::op_checkid_hook(const basic_openid_message& inm) {
+ for(iterator i=begin();i!=end();++i) (*i)->op_checkid_hook(inm); }
+ void extension_chain_t::op_id_res_hook(basic_openid_message& oum) {
+ for(iterator i=begin();i!=end();++i) (*i)->op_id_res_hook(oum); }
+
+
void extension_chain_t::checkid_hook(basic_openid_message& om){
- for(iterator i=begin();i!=end();++i) (*i)->checkid_hook(om);
- }
- void extension_chain_t::id_res_hook(const basic_openid_message& om,const basic_openid_message& sp) {
- for(iterator i=begin();i!=end();++i) (*i)->id_res_hook(om,sp);
- }
- void extension_chain_t::checkid_hook(const basic_openid_message& inm,basic_openid_message& oum) {
- for(iterator i=begin();i!=end();++i) (*i)->checkid_hook(inm,oum);
- }
+ for(iterator i=begin();i!=end();++i) (*i)->checkid_hook(om); }
+ void extension_chain_t::id_res_hook(const basic_openid_message& om,
+ const basic_openid_message& sp) {
+ for(iterator i=begin();i!=end();++i) (*i)->id_res_hook(om,sp); }
+ void extension_chain_t::checkid_hook(const basic_openid_message& inm,
+ basic_openid_message& oum) {
+ for(iterator i=begin();i!=end();++i) (*i)->checkid_hook(inm,oum); }
diff --git a/lib/sreg.cc b/lib/sreg.cc
index 7e2d588..b40cd45 100644
--- a/lib/sreg.cc
+++ b/lib/sreg.cc
@@ -30,3 +30,3 @@ namespace opkele {
- void sreg_t::checkid_hook(basic_openid_message& om) {
+ void sreg_t::rp_checkid_hook(basic_openid_message& om) {
string fr, fo;
@@ -48,3 +48,7 @@ namespace opkele {
- void sreg_t::id_res_hook(const basic_openid_message& om,const basic_openid_message& sp) {
+ void sreg_t::checkid_hook(basic_openid_message& om) {
+ rp_checkid_hook(om); }
+
+ void sreg_t::rp_id_res_hook(const basic_openid_message& om,
+ const basic_openid_message& sp) {
clear();
@@ -69,2 +73,6 @@ namespace opkele {
+ void sreg_t::id_res_hook(const basic_openid_message& om,
+ const basic_openid_message& sp) {
+ rp_id_res_hook(om,sp); }
+
const string& sreg_t::get_field(fieldbit_t fb) const {
@@ -107,3 +115,3 @@ namespace opkele {
- void sreg_t::checkid_hook(const basic_openid_message& inm,basic_openid_message& oum) {
+ void sreg_t::op_checkid_hook(const basic_openid_message& inm) {
string ins = inm.find_ns(OIURI_SREG11,"sreg");
@@ -122,3 +130,5 @@ namespace opkele {
}catch(failed_lookup&) { }
- setup_response(inm,oum);
+ }
+
+ void sreg_t::op_id_res_hook(basic_openid_message& oum) {
string ons = oum.allocate_ns(OIURI_SREG11,"sreg");
@@ -136,3 +146,13 @@ namespace opkele {
+ void sreg_t::checkid_hook(const basic_openid_message& inm,
+ basic_openid_message& oum) {
+ op_checkid_hook(inm);
+ setup_response(inm,oum);
+ op_id_res_hook(oum);
+ }
+
void sreg_t::setup_response(const basic_openid_message& /* inm */,basic_openid_message& /* oum */) {
+ setup_response();
+ }
+ void sreg_t::setup_response() {
fields_response = (fields_required|fields_optional)&has_fields;