summaryrefslogtreecommitdiffabout
path: root/include/opkele
authorMichael Krelin <hacker@klever.net>2008-04-06 09:31:10 (UTC)
committer Michael Krelin <hacker@klever.net>2008-04-06 09:31:10 (UTC)
commit752e484cd2fc239bc582a88fe7d62a225880ee3b (patch) (unidiff)
treead53fd61add881c5262b9cbc66c5db41e179a993 /include/opkele
parentc56867c814a70505e27501c8f02768a594d8e42d (diff)
parent1e3ed01c149aaeed5a64aacff218a5486128fc92 (diff)
downloadlibopkele-752e484cd2fc239bc582a88fe7d62a225880ee3b.zip
libopkele-752e484cd2fc239bc582a88fe7d62a225880ee3b.tar.gz
libopkele-752e484cd2fc239bc582a88fe7d62a225880ee3b.tar.bz2
Merge commit '1e3ed01c149aaeed5a64aacff218a5486128fc92' into devel/openid20
Diffstat (limited to 'include/opkele') (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/curl.h20
-rw-r--r--include/opkele/types.h39
2 files changed, 44 insertions, 15 deletions
diff --git a/include/opkele/curl.h b/include/opkele/curl.h
index 5cf8e48..bcaf11d 100644
--- a/include/opkele/curl.h
+++ b/include/opkele/curl.h
@@ -1,72 +1,92 @@
1#ifndef __OPKELE_CURL_H 1#ifndef __OPKELE_CURL_H
2#define __OPKELE_CURL_H 2#define __OPKELE_CURL_H
3 3
4#include <cassert> 4#include <cassert>
5#include <string> 5#include <string>
6#include <algorithm> 6#include <algorithm>
7#include <curl/curl.h> 7#include <curl/curl.h>
8 8
9namespace opkele { 9namespace opkele {
10 using std::min; 10 using std::min;
11 using std::string; 11 using std::string;
12 12
13 namespace util { 13 namespace util {
14 14
15 class curl_slist_t {
16 public:
17 curl_slist *_s;
18
19 curl_slist_t() : _s(0) { }
20 curl_slist_t(curl_slist *s) : _s(s) { }
21 virtual ~curl_slist_t() throw();
22
23 curl_slist_t& operator=(curl_slist *s);
24
25 operator const curl_slist*(void) const { return _s; }
26 operator curl_slist*(void) { return _s; }
27
28 void append(const char *str);
29 void append(const string& str) {
30 append(str.c_str()); }
31 };
32
15 class curl_t { 33 class curl_t {
16 public: 34 public:
17 CURL *_c; 35 CURL *_c;
18 36
19 curl_t() : _c(0) { } 37 curl_t() : _c(0) { }
20 curl_t(CURL *c) : _c(c) { } 38 curl_t(CURL *c) : _c(c) { }
21 virtual ~curl_t() throw(); 39 virtual ~curl_t() throw();
22 40
23 curl_t& operator=(CURL *c); 41 curl_t& operator=(CURL *c);
24 42
25 operator const CURL*(void) const { return _c; } 43 operator const CURL*(void) const { return _c; }
26 operator CURL*(void) { return _c; } 44 operator CURL*(void) { return _c; }
27 45
28 CURLcode misc_sets(); 46 CURLcode misc_sets();
29 47
30 template<typename PT> 48 template<typename PT>
31 inline CURLcode easy_setopt(CURLoption o,PT p) { assert(_c); return curl_easy_setopt(_c,o,p); } 49 inline CURLcode easy_setopt(CURLoption o,PT p) { assert(_c); return curl_easy_setopt(_c,o,p); }
50 inline CURLcode easy_setopt(CURLoption o,const curl_slist_t& p) {
51 assert(_c); return curl_easy_setopt(_c,o,(const curl_slist*)p); }
32 CURLcode easy_perform() { assert(_c); return curl_easy_perform(_c); } 52 CURLcode easy_perform() { assert(_c); return curl_easy_perform(_c); }
33 template<typename IT> 53 template<typename IT>
34 inline CURLcode easy_getinfo(CURLINFO i,IT p) { assert(_c); return curl_easy_getinfo(_c,i,p); } 54 inline CURLcode easy_getinfo(CURLINFO i,IT p) { assert(_c); return curl_easy_getinfo(_c,i,p); }
35 55
36 static inline CURL *easy_init() { return curl_easy_init(); } 56 static inline CURL *easy_init() { return curl_easy_init(); }
37 57
38 virtual size_t write(void* /* p */,size_t /* s */,size_t /* nm */) { return 0; } 58 virtual size_t write(void* /* p */,size_t /* s */,size_t /* nm */) { return 0; }
39 CURLcode set_write(); 59 CURLcode set_write();
40 60
41 virtual int progress(double /* dlt */,double /* dln*/ ,double /* ult */,double /* uln */) { return 0; } 61 virtual int progress(double /* dlt */,double /* dln*/ ,double /* ult */,double /* uln */) { return 0; }
42 CURLcode set_progress(); 62 CURLcode set_progress();
43 63
44 virtual size_t header(void* /* p */,size_t s,size_t nm) { return s*nm; } 64 virtual size_t header(void* /* p */,size_t s,size_t nm) { return s*nm; }
45 CURLcode set_header(); 65 CURLcode set_header();
46 }; 66 };
47 67
48 template<int lim> 68 template<int lim>
49 class curl_fetch_string_t : public curl_t { 69 class curl_fetch_string_t : public curl_t {
50 public: 70 public:
51 curl_fetch_string_t(CURL *c) 71 curl_fetch_string_t(CURL *c)
52 : curl_t(c) { } 72 : curl_t(c) { }
53 ~curl_fetch_string_t() throw() { } 73 ~curl_fetch_string_t() throw() { }
54 74
55 string response; 75 string response;
56 76
57 size_t write(void *p,size_t size,size_t nmemb) { 77 size_t write(void *p,size_t size,size_t nmemb) {
58 size_t bytes = size*nmemb; 78 size_t bytes = size*nmemb;
59 size_t get = min(lim-response.length(),bytes); 79 size_t get = min(lim-response.length(),bytes);
60 response.append((const char *)p,get); 80 response.append((const char *)p,get);
61 return get; 81 return get;
62 } 82 }
63 }; 83 };
64 84
65 typedef curl_fetch_string_t<16384> curl_pick_t; 85 typedef curl_fetch_string_t<16384> curl_pick_t;
66 86
67 87
68 } 88 }
69 89
70} 90}
71 91
72#endif /* __OPKELE_CURL_H */ 92#endif /* __OPKELE_CURL_H */
diff --git a/include/opkele/types.h b/include/opkele/types.h
index ffb9afb..f63bf5d 100644
--- a/include/opkele/types.h
+++ b/include/opkele/types.h
@@ -73,144 +73,153 @@ namespace opkele {
73 */ 73 */
74 class association_t { 74 class association_t {
75 public: 75 public:
76 76
77 virtual ~association_t() { } 77 virtual ~association_t() { }
78 78
79 /** 79 /**
80 * retrieve the server with which association was established. 80 * retrieve the server with which association was established.
81 * @return server name 81 * @return server name
82 */ 82 */
83 virtual string server() const = 0; 83 virtual string server() const = 0;
84 /** 84 /**
85 * retrieve the association handle. 85 * retrieve the association handle.
86 * @return handle 86 * @return handle
87 */ 87 */
88 virtual string handle() const = 0; 88 virtual string handle() const = 0;
89 /** 89 /**
90 * retrieve the association type. 90 * retrieve the association type.
91 * @return association type 91 * @return association type
92 */ 92 */
93 virtual string assoc_type() const = 0; 93 virtual string assoc_type() const = 0;
94 /** 94 /**
95 * retrieve the association secret. 95 * retrieve the association secret.
96 * @return association secret 96 * @return association secret
97 */ 97 */
98 virtual secret_t secret() const = 0; 98 virtual secret_t secret() const = 0;
99 /** 99 /**
100 * retrieve the number of seconds the association expires in. 100 * retrieve the number of seconds the association expires in.
101 * @return seconds till expiration 101 * @return seconds till expiration
102 */ 102 */
103 virtual int expires_in() const = 0; 103 virtual int expires_in() const = 0;
104 /** 104 /**
105 * check whether the association is stateless. 105 * check whether the association is stateless.
106 * @return true if stateless 106 * @return true if stateless
107 */ 107 */
108 virtual bool stateless() const = 0; 108 virtual bool stateless() const = 0;
109 /** 109 /**
110 * check whether the association is expired. 110 * check whether the association is expired.
111 * @return true if expired 111 * @return true if expired
112 */ 112 */
113 virtual bool is_expired() const = 0; 113 virtual bool is_expired() const = 0;
114 }; 114 };
115 115
116 /** 116 /**
117 * the shared_ptr<> for association_t object type 117 * the shared_ptr<> for association_t object type
118 */ 118 */
119 typedef tr1mem::shared_ptr<association_t> assoc_t; 119 typedef tr1mem::shared_ptr<association_t> assoc_t;
120 120
121 class basic_openid_message { 121 class basic_fields {
122 public: 122 public:
123 typedef list<string> fields_t;
124 typedef util::forward_iterator_proxy< 123 typedef util::forward_iterator_proxy<
125 string,const string&,const string* 124 string,const string&,const string*
126 > fields_iterator; 125 > fields_iterator;
127 126
128 basic_openid_message() { } 127 basic_fields() { }
129 virtual ~basic_openid_message() { } 128 virtual ~basic_fields() { }
130 basic_openid_message(const basic_openid_message& x); 129 basic_fields(const basic_fields& x);
131 void copy_to(basic_openid_message& x) const; 130 void copy_to(basic_fields& x) const;
132 void append_to(basic_openid_message& x) const; 131 void append_to(basic_fields& x) const;
133 132
134 virtual bool has_field(const string& n) const = 0; 133 virtual bool has_field(const string& n) const = 0;
135 virtual const string& get_field(const string& n) const = 0; 134 virtual const string& get_field(const string& n) const = 0;
136 135
137 virtual bool has_ns(const string& uri) const;
138 virtual string get_ns(const string& uri) const;
139
140 virtual fields_iterator fields_begin() const = 0; 136 virtual fields_iterator fields_begin() const = 0;
141 virtual fields_iterator fields_end() const = 0; 137 virtual fields_iterator fields_end() const = 0;
142 138
143 virtual string append_query(const string& url,const char *pfx="openid.") const; 139 virtual string append_query(const string& url,const char *pfx=0) const;
144 virtual string query_string(const char *pfx="openid.") const; 140 virtual string query_string(const char *pfx=0) const;
145
146 141
147 virtual void reset_fields(); 142 virtual void reset_fields();
148 virtual void set_field(const string& n,const string& v); 143 virtual void set_field(const string& n,const string& v);
149 virtual void reset_field(const string& n); 144 virtual void reset_field(const string& n);
150 145
146 };
147
148 class basic_openid_message : public basic_fields {
149 public:
150
151 basic_openid_message() { }
152 basic_openid_message(const basic_openid_message& x);
153
154 virtual bool has_ns(const string& uri) const;
155 virtual string get_ns(const string& uri) const;
156
157 virtual string append_query(const string& url,const char *pfx="openid.") const {
158 return basic_fields::append_query(url,pfx); }
159 virtual string query_string(const char *pfx="openid.") const {
160 return basic_fields::query_string(pfx); }
161
151 virtual void from_keyvalues(const string& kv); 162 virtual void from_keyvalues(const string& kv);
152 virtual void to_keyvalues(ostream& o) const; 163 virtual void to_keyvalues(ostream& o) const;
153 164
154 virtual void to_htmlhiddens(ostream& o,const char* pfx=0) const; 165 virtual void to_htmlhiddens(ostream& o,const char* pfx=0) const;
155 166
156 void add_to_signed(const string& fields); 167 void add_to_signed(const string& fields);
157 string find_ns(const string& uri,const char *pfx) const; 168 string find_ns(const string& uri,const char *pfx) const;
158 string allocate_ns(const string& uri,const char *pfx); 169 string allocate_ns(const string& uri,const char *pfx);
159 }; 170 };
160 171
161 class openid_message_t : public basic_openid_message, public map<string,string> { 172 class openid_message_t : public basic_openid_message, public map<string,string> {
162 public: 173 public:
163 openid_message_t() { } 174 openid_message_t() { }
164 openid_message_t(const basic_openid_message& x) 175 openid_message_t(const basic_openid_message& x)
165 : basic_openid_message(x) { } 176 : basic_openid_message(x) { }
166 177
167 void copy_to(basic_openid_message& x) const;
168
169 bool has_field(const string& n) const; 178 bool has_field(const string& n) const;
170 const string& get_field(const string& n) const; 179 const string& get_field(const string& n) const;
171 virtual fields_iterator fields_begin() const; 180 virtual fields_iterator fields_begin() const;
172 virtual fields_iterator fields_end() const; 181 virtual fields_iterator fields_end() const;
173 182
174 void reset_fields(); 183 void reset_fields();
175 void set_field(const string& n,const string& v); 184 void set_field(const string& n,const string& v);
176 void reset_field(const string& n); 185 void reset_field(const string& n);
177 }; 186 };
178 187
179 /** 188 /**
180 * request/response parameters map 189 * request/response parameters map
181 */ 190 */
182 class params_t : public openid_message_t { 191 class params_t : public openid_message_t {
183 public: 192 public:
184 193
185 /** 194 /**
186 * check whether the parameter is present. 195 * check whether the parameter is present.
187 * @param n the parameter name 196 * @param n the parameter name
188 * @return true if yes 197 * @return true if yes
189 */ 198 */
190 bool has_param(const string& n) const { 199 bool has_param(const string& n) const {
191 return has_field(n); } 200 return has_field(n); }
192 /** 201 /**
193 * retrieve the parameter (const version) 202 * retrieve the parameter (const version)
194 * @param n the parameter name 203 * @param n the parameter name
195 * @return the parameter value 204 * @return the parameter value
196 * @throw failed_lookup if there is no such parameter 205 * @throw failed_lookup if there is no such parameter
197 */ 206 */
198 const string& get_param(const string& n) const { 207 const string& get_param(const string& n) const {
199 return get_field(n); } 208 return get_field(n); }
200 209
201 /** 210 /**
202 * parse the OpenID key/value data. 211 * parse the OpenID key/value data.
203 * @param kv the OpenID key/value data 212 * @param kv the OpenID key/value data
204 */ 213 */
205 void parse_keyvalues(const string& kv) { 214 void parse_keyvalues(const string& kv) {
206 from_keyvalues(kv); } 215 from_keyvalues(kv); }
207 216
208 string append_query(const string& url,const char *prefix="openid.") const; 217 string append_query(const string& url,const char *prefix="openid.") const;
209 218
210 }; 219 };
211 220
212 struct openid_endpoint_t { 221 struct openid_endpoint_t {
213 string uri; 222 string uri;
214 string claimed_id; 223 string claimed_id;
215 string local_id; 224 string local_id;
216 225