summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/util.h18
-rw-r--r--lib/basic_rp.cc21
2 files changed, 20 insertions, 19 deletions
diff --git a/include/opkele/util.h b/include/opkele/util.h
index e9176b0..6f3ddf6 100644
--- a/include/opkele/util.h
+++ b/include/opkele/util.h
@@ -144,6 +144,24 @@ namespace opkele {
144 144
145 string base64_signature(const assoc_t& assoc,const basic_openid_message& om); 145 string base64_signature(const assoc_t& assoc,const basic_openid_message& om);
146 146
147 class change_mode_message_proxy : public basic_openid_message {
148 public:
149 const basic_openid_message& x;
150 const string& mode;
151
152 change_mode_message_proxy(const basic_openid_message& xx,const string& m) : x(xx), mode(m) { }
153
154 bool has_field(const string& n) const { return x.has_field(n); }
155 const string& get_field(const string& n) const {
156 return (n=="mode")?mode:x.get_field(n); }
157 bool has_ns(const string& uri) const {return x.has_ns(uri); }
158 string get_ns(const string& uri) const { return x.get_ns(uri); }
159 fields_iterator fields_begin() const {
160 return x.fields_begin(); }
161 fields_iterator fields_end() const {
162 return x.fields_end(); }
163 };
164
147 } 165 }
148 166
149} 167}
diff --git a/lib/basic_rp.cc b/lib/basic_rp.cc
index 2da8416..a884583 100644
--- a/lib/basic_rp.cc
+++ b/lib/basic_rp.cc
@@ -278,28 +278,11 @@ namespace opkele {
278 if(ext) ext->id_res_hook(om,signeds); 278 if(ext) ext->id_res_hook(om,signeds);
279 } 279 }
280 280
281 class check_auth_message_proxy : public basic_openid_message {
282 public:
283 const basic_openid_message& x;
284
285 check_auth_message_proxy(const basic_openid_message& xx) : x(xx) { }
286
287 bool has_field(const string& n) const { return x.has_field(n); }
288 const string& get_field(const string& n) const {
289 static const string checkauthmode="check_authentication";
290 return (n=="mode")?checkauthmode:x.get_field(n); }
291 bool has_ns(const string& uri) const {return x.has_ns(uri); }
292 string get_ns(const string& uri) const { return x.get_ns(uri); }
293 fields_iterator fields_begin() const {
294 return x.fields_begin(); }
295 fields_iterator fields_end() const {
296 return x.fields_end(); }
297 };
298
299 void basic_RP::check_authentication(const string& OP, 281 void basic_RP::check_authentication(const string& OP,
300 const basic_openid_message& om){ 282 const basic_openid_message& om){
301 openid_message_t res; 283 openid_message_t res;
302 direct_request(res,check_auth_message_proxy(om),OP); 284 static const string checkauthmode = "check_authentication";
285 direct_request(res,util::change_mode_message_proxy(om,checkauthmode),OP);
303 if(res.has_field("is_valid")) { 286 if(res.has_field("is_valid")) {
304 if(res.get_field("is_valid")=="true") { 287 if(res.get_field("is_valid")=="true") {
305 if(res.has_field("invalidate_handle")) 288 if(res.has_field("invalidate_handle"))