From f5eb33d7a9c296e3fa7bde9b678f0e1027a9bf88 Mon Sep 17 00:00:00 2001 From: Michael Krelin Date: Thu, 11 Jan 2007 23:52:29 +0000 Subject: extension chain --- diff --git a/include/Makefile.am b/include/Makefile.am index 4b9b02a..2c190b8 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -7,7 +7,8 @@ nobase_include_HEADERS = \ opkele/server.h \ opkele/consumer.h \ opkele/extension.h \ - opkele/sreg.h + opkele/sreg.h \ + opkele/extension_chain.h EXTRA_DIST = \ opkele/data.h \ opkele/util.h diff --git a/include/opkele/extension_chain.h b/include/opkele/extension_chain.h new file mode 100644 index 0000000..955f4d5 --- a/dev/null +++ b/include/opkele/extension_chain.h @@ -0,0 +1,50 @@ +#ifndef __OPKELE_EXTENSION_CHAIN_H +#define __OPKELE_EXTENSION_CHAIN_H + +/** + * @file + * @brief extension chain extension + */ + +#include +#include + +/** + * @brief the main opkele namespace + */ +namespace opkele { + using std::list; + + /** + * OpenID extensions chain used to combine extensions, it is actually an + * stl list of pointers to extensions. + */ + class extension_chain_t : public extension_t, public list { + public: + + /** + * Default constructor creates an empty chain + */ + extension_chain_t() { } + /** + * Create extension chain with a single extension in it + */ + extension_chain_t(extension_t *e) { push_back(e); } + + /** + * Implementation of consumer's checkid hook + */ + virtual void checkid_hook(params_t& p,const string& identity); + /** + * Implementation of consumer's id_res hook + */ + virtual void id_res_hook(const params_t& p,const params_t& sp,const string& identity); + /** + * Implementation of server's checkid_hook + */ + virtual void checkid_hook(const params_t& pin,params_t& pout); + }; + +} + +#endif /* __OPKELE_EXTENSION_CHAIN_H */ diff --git a/lib/Makefile.am b/lib/Makefile.am index 783f2ab..bdadd44 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -23,6 +23,7 @@ libopkele_la_SOURCES = \ consumer.cc \ exception.cc \ extension.cc \ - sreg.cc + sreg.cc \ + extension_chain.cc libopkele_la_LDFLAGS = \ -version-info 1:0:0 diff --git a/lib/extension_chain.cc b/lib/extension_chain.cc new file mode 100644 index 0000000..16537dc --- a/dev/null +++ b/lib/extension_chain.cc @@ -0,0 +1,16 @@ +#include +#include + +namespace opkele { + + void extension_chain_t::checkid_hook(params_t& p,const string& identity) { + for(iterator i=begin();i!=end();++i) (*i)->checkid_hook(p,identity); + } + void extension_chain_t::id_res_hook(const params_t& p,const params_t& sp,const string& identity) { + for(iterator i=begin();i!=end();++i) (*i)->id_res_hook(p,sp,identity); + } + void extension_chain_t::checkid_hook(const params_t& pin,params_t& pout) { + for(iterator i=begin();i!=end();++i) (*i)->checkid_hook(pin,pout); + } + +} -- cgit v0.9.0.2