summaryrefslogtreecommitdiffabout
path: root/include
authorMichael Krelin <hacker@klever.net>2007-12-30 21:08:55 (UTC)
committer Michael Krelin <hacker@klever.net>2008-01-04 18:22:43 (UTC)
commitb7cec6ccef5d4178cf02c4cc240fd39ab7c8fe97 (patch) (unidiff)
treec898f449b4238a239f491a62bd77ac7c75663bb1 /include
parent4b75ac58aa9baaf611df8ef694fd585529823c66 (diff)
downloadlibopkele-b7cec6ccef5d4178cf02c4cc240fd39ab7c8fe97.zip
libopkele-b7cec6ccef5d4178cf02c4cc240fd39ab7c8fe97.tar.gz
libopkele-b7cec6ccef5d4178cf02c4cc240fd39ab7c8fe97.tar.bz2
parse ProviderID while doing discovery
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (limited to 'include') (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/types.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/opkele/types.h b/include/opkele/types.h
index d959021..4e1415f 100644
--- a/include/opkele/types.h
+++ b/include/opkele/types.h
@@ -1,242 +1,246 @@
1#ifndef __OPKELE_TYPES_H 1#ifndef __OPKELE_TYPES_H
2#define __OPKELE_TYPES_H 2#define __OPKELE_TYPES_H
3 3
4/** 4/**
5 * @file 5 * @file
6 * @brief various types declarations 6 * @brief various types declarations
7 */ 7 */
8 8
9#include <ostream> 9#include <ostream>
10#include <vector> 10#include <vector>
11#include <string> 11#include <string>
12#include <map> 12#include <map>
13#include <set> 13#include <set>
14#include <opkele/tr1-mem.h> 14#include <opkele/tr1-mem.h>
15 15
16namespace opkele { 16namespace opkele {
17 using std::vector; 17 using std::vector;
18 using std::string; 18 using std::string;
19 using std::map; 19 using std::map;
20 using std::ostream; 20 using std::ostream;
21 using std::multimap; 21 using std::multimap;
22 using std::set; 22 using std::set;
23 23
24 /** 24 /**
25 * the OpenID operation mode 25 * the OpenID operation mode
26 */ 26 */
27 typedef enum _mode_t { 27 typedef enum _mode_t {
28 mode_associate, 28 mode_associate,
29 mode_checkid_immediate, 29 mode_checkid_immediate,
30 mode_checkid_setup, 30 mode_checkid_setup,
31 mode_check_association 31 mode_check_association
32 } mode_t; 32 } mode_t;
33 33
34 /** 34 /**
35 * the association secret container 35 * the association secret container
36 */ 36 */
37 class secret_t : public vector<unsigned char> { 37 class secret_t : public vector<unsigned char> {
38 public: 38 public:
39 39
40 /** 40 /**
41 * xor the secret and hmac together and encode, using base64 41 * xor the secret and hmac together and encode, using base64
42 * @param key_d pointer to the message digest 42 * @param key_d pointer to the message digest
43 * @param rv reference to the return value 43 * @param rv reference to the return value
44 */ 44 */
45 void enxor_to_base64(const unsigned char *key_d,string& rv) const; 45 void enxor_to_base64(const unsigned char *key_d,string& rv) const;
46 /** 46 /**
47 * decode base64-encoded secret and xor it with the message digest 47 * decode base64-encoded secret and xor it with the message digest
48 * @param key_d pointer to the message digest 48 * @param key_d pointer to the message digest
49 * @param b64 base64-encoded secret value 49 * @param b64 base64-encoded secret value
50 */ 50 */
51 void enxor_from_base64(const unsigned char *key_d,const string& b64); 51 void enxor_from_base64(const unsigned char *key_d,const string& b64);
52 /** 52 /**
53 * plainly encode to base64 representation 53 * plainly encode to base64 representation
54 * @param rv reference to the return value 54 * @param rv reference to the return value
55 */ 55 */
56 void to_base64(string& rv) const; 56 void to_base64(string& rv) const;
57 /** 57 /**
58 * decode cleartext secret from base64 58 * decode cleartext secret from base64
59 * @param b64 base64-encoded representation of the secret value 59 * @param b64 base64-encoded representation of the secret value
60 */ 60 */
61 void from_base64(const string& b64); 61 void from_base64(const string& b64);
62 }; 62 };
63 63
64 /** 64 /**
65 * Interface to the association. 65 * Interface to the association.
66 */ 66 */
67 class association_t { 67 class association_t {
68 public: 68 public:
69 69
70 virtual ~association_t() { } 70 virtual ~association_t() { }
71 71
72 /** 72 /**
73 * retrieve the server with which association was established. 73 * retrieve the server with which association was established.
74 * @return server name 74 * @return server name
75 */ 75 */
76 virtual string server() const = 0; 76 virtual string server() const = 0;
77 /** 77 /**
78 * retrieve the association handle. 78 * retrieve the association handle.
79 * @return handle 79 * @return handle
80 */ 80 */
81 virtual string handle() const = 0; 81 virtual string handle() const = 0;
82 /** 82 /**
83 * retrieve the association type. 83 * retrieve the association type.
84 * @return association type 84 * @return association type
85 */ 85 */
86 virtual string assoc_type() const = 0; 86 virtual string assoc_type() const = 0;
87 /** 87 /**
88 * retrieve the association secret. 88 * retrieve the association secret.
89 * @return association secret 89 * @return association secret
90 */ 90 */
91 virtual secret_t secret() const = 0; 91 virtual secret_t secret() const = 0;
92 /** 92 /**
93 * retrieve the number of seconds the association expires in. 93 * retrieve the number of seconds the association expires in.
94 * @return seconds till expiration 94 * @return seconds till expiration
95 */ 95 */
96 virtual int expires_in() const = 0; 96 virtual int expires_in() const = 0;
97 /** 97 /**
98 * check whether the association is stateless. 98 * check whether the association is stateless.
99 * @return true if stateless 99 * @return true if stateless
100 */ 100 */
101 virtual bool stateless() const = 0; 101 virtual bool stateless() const = 0;
102 /** 102 /**
103 * check whether the association is expired. 103 * check whether the association is expired.
104 * @return true if expired 104 * @return true if expired
105 */ 105 */
106 virtual bool is_expired() const = 0; 106 virtual bool is_expired() const = 0;
107 }; 107 };
108 108
109 /** 109 /**
110 * the shared_ptr<> for association_t object type 110 * the shared_ptr<> for association_t object type
111 */ 111 */
112 typedef tr1mem::shared_ptr<association_t> assoc_t; 112 typedef tr1mem::shared_ptr<association_t> assoc_t;
113 113
114 /** 114 /**
115 * request/response parameters map 115 * request/response parameters map
116 */ 116 */
117 class params_t : public map<string,string> { 117 class params_t : public map<string,string> {
118 public: 118 public:
119 119
120 /** 120 /**
121 * check whether the parameter is present. 121 * check whether the parameter is present.
122 * @param n the parameter name 122 * @param n the parameter name
123 * @return true if yes 123 * @return true if yes
124 */ 124 */
125 bool has_param(const string& n) const; 125 bool has_param(const string& n) const;
126 /** 126 /**
127 * retrieve the parameter (const version) 127 * retrieve the parameter (const version)
128 * @param n the parameter name 128 * @param n the parameter name
129 * @return the parameter value 129 * @return the parameter value
130 * @throw failed_lookup if there is no such parameter 130 * @throw failed_lookup if there is no such parameter
131 */ 131 */
132 const string& get_param(const string& n) const; 132 const string& get_param(const string& n) const;
133 /** 133 /**
134 * retrieve the parameter. 134 * retrieve the parameter.
135 * @param n the parameter name 135 * @param n the parameter name
136 * @return the parameter value 136 * @return the parameter value
137 * @throw failed_lookup if there is no such parameter 137 * @throw failed_lookup if there is no such parameter
138 */ 138 */
139 string& get_param(const string& n); 139 string& get_param(const string& n);
140 140
141 /** 141 /**
142 * parse the OpenID key/value data. 142 * parse the OpenID key/value data.
143 * @param kv the OpenID key/value data 143 * @param kv the OpenID key/value data
144 */ 144 */
145 void parse_keyvalues(const string& kv); 145 void parse_keyvalues(const string& kv);
146 /** 146 /**
147 * sign the fields. 147 * sign the fields.
148 * @param secret the secret used for signing 148 * @param secret the secret used for signing
149 * @param sig reference to the string, containing base64-encoded 149 * @param sig reference to the string, containing base64-encoded
150 * result 150 * result
151 * @param slist the comma-separated list of fields to sign 151 * @param slist the comma-separated list of fields to sign
152 * @param prefix the string to prepend to parameter names 152 * @param prefix the string to prepend to parameter names
153 */ 153 */
154 void sign(secret_t secret,string& sig,const string& slist,const char *prefix=0) const; 154 void sign(secret_t secret,string& sig,const string& slist,const char *prefix=0) const;
155 155
156 /** 156 /**
157 * append parameters to the URL as a GET-request parameters. 157 * append parameters to the URL as a GET-request parameters.
158 * @param url the base URL 158 * @param url the base URL
159 * @param prefix the string to prepend to parameter names 159 * @param prefix the string to prepend to parameter names
160 * @return the ready-to-use location 160 * @return the ready-to-use location
161 */ 161 */
162 string append_query(const string& url,const char *prefix = "openid.") const; 162 string append_query(const string& url,const char *prefix = "openid.") const;
163 163
164 /** 164 /**
165 * make up a query string suitable for use in GET and POST 165 * make up a query string suitable for use in GET and POST
166 * requests. 166 * requests.
167 * @param prefix string to prened to parameter names 167 * @param prefix string to prened to parameter names
168 * @return query string 168 * @return query string
169 */ 169 */
170 string query_string(const char *prefix = "openid.") const; 170 string query_string(const char *prefix = "openid.") const;
171 }; 171 };
172 172
173 /** 173 /**
174 * dump the key/value pairs for the parameters to the stream. 174 * dump the key/value pairs for the parameters to the stream.
175 * @param o output stream 175 * @param o output stream
176 * @param p the parameters 176 * @param p the parameters
177 */ 177 */
178 ostream& operator << (ostream& o,const params_t& p); 178 ostream& operator << (ostream& o,const params_t& p);
179 179
180 namespace xrd { 180 namespace xrd {
181 181
182 struct priority_compare { 182 struct priority_compare {
183 inline bool operator()(long a,long b) const { 183 inline bool operator()(long a,long b) const {
184 return (a<0) ? false : (b<0) ? false : (a<b); 184 return (a<0) ? false : (b<0) ? false : (a<b);
185 } 185 }
186 }; 186 };
187 187
188 template <typename _DT> 188 template <typename _DT>
189 class priority_map : public multimap<long,_DT,priority_compare> { 189 class priority_map : public multimap<long,_DT,priority_compare> {
190 typedef multimap<long,_DT,priority_compare> map_type; 190 typedef multimap<long,_DT,priority_compare> map_type;
191 public: 191 public:
192 192
193 inline _DT& add(long priority,const _DT& d) { 193 inline _DT& add(long priority,const _DT& d) {
194 return insert(typename map_type::value_type(priority,d))->second; 194 return insert(typename map_type::value_type(priority,d))->second;
195 } 195 }
196 }; 196 };
197 197
198 typedef priority_map<string> canonical_ids_t; 198 typedef priority_map<string> canonical_ids_t;
199 typedef priority_map<string> local_ids_t; 199 typedef priority_map<string> local_ids_t;
200 typedef set<string> types_t; 200 typedef set<string> types_t;
201 typedef priority_map<string> uris_t; 201 typedef priority_map<string> uris_t;
202 202
203 class service_t { 203 class service_t {
204 public: 204 public:
205 types_t types; 205 types_t types;
206 uris_t uris; 206 uris_t uris;
207 local_ids_t local_ids; 207 local_ids_t local_ids;
208 string provider_id;
208 209
209 void clear() { 210 void clear() {
210 types.clear(); 211 types.clear();
211 uris.clear(); local_ids.clear(); 212 uris.clear(); local_ids.clear();
213 provider_id.clear();
212 } 214 }
213 }; 215 };
214 typedef priority_map<service_t> services_t; 216 typedef priority_map<service_t> services_t;
215 217
216 class XRD_t { 218 class XRD_t {
217 public: 219 public:
218 time_t expires; 220 time_t expires;
219 221
220 canonical_ids_t canonical_ids; 222 canonical_ids_t canonical_ids;
221 local_ids_t local_ids; 223 local_ids_t local_ids;
222 services_t services; 224 services_t services;
225 string provider_id;
223 226
224 void clear() { 227 void clear() {
225 expires = 0; 228 expires = 0;
226 canonical_ids.clear(); local_ids.clear(); 229 canonical_ids.clear(); local_ids.clear();
227 services.clear(); 230 services.clear();
231 provider_id.clear();
228 } 232 }
229 bool empty() const { 233 bool empty() const {
230 return 234 return
231 canonical_ids.empty() 235 canonical_ids.empty()
232 && local_ids.empty() 236 && local_ids.empty()
233 && services.empty(); 237 && services.empty();
234 } 238 }
235 239
236 }; 240 };
237 241
238 } 242 }
239 243
240} 244}
241 245
242#endif /* __OPKELE_TYPES_H */ 246#endif /* __OPKELE_TYPES_H */