author | Michael Krelin <hacker@klever.net> | 2008-03-02 20:57:57 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-03-02 20:57:57 (UTC) |
commit | f6482fb9003e4953f838ba4ef2c110190355622f (patch) (unidiff) | |
tree | 978ff6a8647c008cb3726c604b0749edb622171c | |
parent | da3f84153be2a93da7ffc49af33b29b9725fac38 (diff) | |
download | libopkele-f6482fb9003e4953f838ba4ef2c110190355622f.zip libopkele-f6482fb9003e4953f838ba4ef2c110190355622f.tar.gz libopkele-f6482fb9003e4953f838ba4ef2c110190355622f.tar.bz2 |
reinstated prefix handling in query building
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | include/opkele/types.h | 4 | ||||
-rw-r--r-- | lib/openid_message.cc | 20 |
2 files changed, 13 insertions, 11 deletions
diff --git a/include/opkele/types.h b/include/opkele/types.h index 1fab869..af7fb1a 100644 --- a/include/opkele/types.h +++ b/include/opkele/types.h | |||
@@ -126,34 +126,34 @@ namespace opkele { | |||
126 | > fields_iterator; | 126 | > fields_iterator; |
127 | 127 | ||
128 | basic_openid_message() { } | 128 | basic_openid_message() { } |
129 | virtual ~basic_openid_message() { } | 129 | virtual ~basic_openid_message() { } |
130 | basic_openid_message(const basic_openid_message& x); | 130 | basic_openid_message(const basic_openid_message& x); |
131 | void copy_to(basic_openid_message& x) const; | 131 | void copy_to(basic_openid_message& x) const; |
132 | 132 | ||
133 | virtual bool has_field(const string& n) const = 0; | 133 | virtual bool has_field(const string& n) const = 0; |
134 | virtual const string& get_field(const string& n) const = 0; | 134 | virtual const string& get_field(const string& n) const = 0; |
135 | 135 | ||
136 | virtual bool has_ns(const string& uri) const; | 136 | virtual bool has_ns(const string& uri) const; |
137 | virtual string get_ns(const string& uri) const; | 137 | virtual string get_ns(const string& uri) const; |
138 | 138 | ||
139 | virtual fields_iterator fields_begin() const = 0; | 139 | virtual fields_iterator fields_begin() const = 0; |
140 | virtual fields_iterator fields_end() const = 0; | 140 | virtual fields_iterator fields_end() const = 0; |
141 | 141 | ||
142 | virtual string append_query(const string& url) const; | 142 | virtual string append_query(const string& url,const char *pfx="openid.") const; |
143 | virtual string query_string() const; | 143 | virtual string query_string(const char *pfx="openid.") const; |
144 | 144 | ||
145 | 145 | ||
146 | virtual void reset_fields(); | 146 | virtual void reset_fields(); |
147 | virtual void set_field(const string& n,const string& v); | 147 | virtual void set_field(const string& n,const string& v); |
148 | virtual void reset_field(const string& n); | 148 | virtual void reset_field(const string& n); |
149 | 149 | ||
150 | virtual void from_keyvalues(const string& kv); | 150 | virtual void from_keyvalues(const string& kv); |
151 | virtual void to_keyvalues(ostream& o) const; | 151 | virtual void to_keyvalues(ostream& o) const; |
152 | 152 | ||
153 | virtual void to_htmlhiddens(ostream& o,const char* pfx=0) const; | 153 | virtual void to_htmlhiddens(ostream& o,const char* pfx=0) const; |
154 | 154 | ||
155 | void add_to_signed(const string& fields); | 155 | void add_to_signed(const string& fields); |
156 | string find_ns(const string& uri,const char *pfx) const; | 156 | string find_ns(const string& uri,const char *pfx) const; |
157 | string allocate_ns(const string& uri,const char *pfx); | 157 | string allocate_ns(const string& uri,const char *pfx); |
158 | }; | 158 | }; |
159 | 159 | ||
diff --git a/lib/openid_message.cc b/lib/openid_message.cc index 75e59b3..4b9179b 100644 --- a/lib/openid_message.cc +++ b/lib/openid_message.cc | |||
@@ -54,65 +54,67 @@ namespace opkele { | |||
54 | return !(i==ei); | 54 | return !(i==ei); |
55 | } | 55 | } |
56 | string basic_openid_message::get_ns(const string& uri) const { | 56 | string basic_openid_message::get_ns(const string& uri) const { |
57 | fields_iterator ei = fields_end(); | 57 | fields_iterator ei = fields_end(); |
58 | fields_iterator i = find_if(fields_begin(),fields_end(), | 58 | fields_iterator i = find_if(fields_begin(),fields_end(), |
59 | __om_ns_finder(*this,uri)); | 59 | __om_ns_finder(*this,uri)); |
60 | if(i==ei) | 60 | if(i==ei) |
61 | throw failed_lookup(OPKELE_CP_ string("failed to find namespace ")+uri); | 61 | throw failed_lookup(OPKELE_CP_ string("failed to find namespace ")+uri); |
62 | return i->substr(3); | 62 | return i->substr(3); |
63 | } | 63 | } |
64 | 64 | ||
65 | struct __om_query_builder : public unary_function<const string&,void> { | 65 | struct __om_query_builder : public unary_function<const string&,void> { |
66 | public: | 66 | public: |
67 | const basic_openid_message& om; | 67 | const basic_openid_message& om; |
68 | bool first; | 68 | bool first; |
69 | string& rv; | 69 | string& rv; |
70 | const char *pfx; | ||
70 | 71 | ||
71 | __om_query_builder(string& r,const basic_openid_message& m) | 72 | __om_query_builder(const char *p,string& r,const basic_openid_message& m) |
72 | : om(m), first(true), rv(r) { | 73 | : om(m), first(true), rv(r), pfx(p) { |
73 | for_each(om.fields_begin(),om.fields_end(),*this); | 74 | for_each(om.fields_begin(),om.fields_end(),*this); |
74 | } | 75 | } |
75 | __om_query_builder(string& r,const basic_openid_message& m,const string& u) | 76 | __om_query_builder(const char *p,string& r,const basic_openid_message& m,const string& u) |
76 | : om(m), first(true), rv(r) { | 77 | : om(m), first(true), rv(r), pfx(p) { |
77 | rv = u; | 78 | rv = u; |
78 | if(rv.find('?')==string::npos) | 79 | if(rv.find('?')==string::npos) |
79 | rv += '?'; | 80 | rv += '?'; |
80 | else | 81 | else |
81 | first = false; | 82 | first = false; |
82 | for_each(om.fields_begin(),om.fields_end(),*this); | 83 | for_each(om.fields_begin(),om.fields_end(),*this); |
83 | } | 84 | } |
84 | 85 | ||
85 | result_type operator()(argument_type f) { | 86 | result_type operator()(argument_type f) { |
86 | if(first) | 87 | if(first) |
87 | first = false; | 88 | first = false; |
88 | else | 89 | else |
89 | rv += '&'; | 90 | rv += '&'; |
90 | rv += "openid."; rv+= f; | 91 | if(pfx) rv += pfx; |
92 | rv+= f; | ||
91 | rv += '='; | 93 | rv += '='; |
92 | rv += util::url_encode(om.get_field(f)); | 94 | rv += util::url_encode(om.get_field(f)); |
93 | } | 95 | } |
94 | }; | 96 | }; |
95 | 97 | ||
96 | string basic_openid_message::append_query(const string& url) const { | 98 | string basic_openid_message::append_query(const string& url,const char *pfx) const { |
97 | string rv; | 99 | string rv; |
98 | return __om_query_builder(rv,*this,url).rv; | 100 | return __om_query_builder(pfx,rv,*this,url).rv; |
99 | } | 101 | } |
100 | string basic_openid_message::query_string() const { | 102 | string basic_openid_message::query_string(const char *pfx) const { |
101 | string rv; | 103 | string rv; |
102 | return __om_query_builder(rv,*this).rv; | 104 | return __om_query_builder(pfx,rv,*this).rv; |
103 | } | 105 | } |
104 | 106 | ||
105 | void basic_openid_message::reset_fields() { | 107 | void basic_openid_message::reset_fields() { |
106 | throw not_implemented(OPKELE_CP_ "reset_fields() not implemented"); | 108 | throw not_implemented(OPKELE_CP_ "reset_fields() not implemented"); |
107 | } | 109 | } |
108 | void basic_openid_message::set_field(const string&,const string&) { | 110 | void basic_openid_message::set_field(const string&,const string&) { |
109 | throw not_implemented(OPKELE_CP_ "set_field() not implemented"); | 111 | throw not_implemented(OPKELE_CP_ "set_field() not implemented"); |
110 | } | 112 | } |
111 | void basic_openid_message::reset_field(const string&) { | 113 | void basic_openid_message::reset_field(const string&) { |
112 | throw not_implemented(OPKELE_CP_ "reset_field() not implemented"); | 114 | throw not_implemented(OPKELE_CP_ "reset_field() not implemented"); |
113 | } | 115 | } |
114 | 116 | ||
115 | void basic_openid_message::from_keyvalues(const string& kv) { | 117 | void basic_openid_message::from_keyvalues(const string& kv) { |
116 | reset_fields(); | 118 | reset_fields(); |
117 | string::size_type p = 0; | 119 | string::size_type p = 0; |
118 | while(true) { | 120 | while(true) { |