-rw-r--r-- | include/opkele/ax.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/include/opkele/ax.h b/include/opkele/ax.h new file mode 100644 index 0000000..996d756 --- a/dev/null +++ b/include/opkele/ax.h | |||
@@ -0,0 +1,84 @@ | |||
1 | #ifndef __OPKELE_AX_H | ||
2 | #define __OPKELE_AX_H | ||
3 | |||
4 | /** | ||
5 | * @file | ||
6 | * @brief Attribute Exchange extension | ||
7 | */ | ||
8 | |||
9 | #include <opkele/extension.h> | ||
10 | |||
11 | namespace opkele { | ||
12 | |||
13 | /** | ||
14 | * OpenID simple registration extension implementation | ||
15 | * http://openid.net/specs/openid-simple-registration-extension-1_0.html | ||
16 | */ | ||
17 | class ax_t : public extension_t { | ||
18 | public: | ||
19 | /** special "count" value for add_attribute to request fetching "as many values as possible". */ | ||
20 | static const int UNLIMITED_COUNT = -1; | ||
21 | |||
22 | /** | ||
23 | * Optional URL for receiving future attribute updates. | ||
24 | * Set it before checkid_setup to send up the URL; read it after id_res to get it back. | ||
25 | */ | ||
26 | std::string update_url; | ||
27 | |||
28 | /** | ||
29 | * Consumer constructor. | ||
30 | */ | ||
31 | ax_t() : alias_count(0) { } | ||
32 | |||
33 | /** Adds an attribute to request during checkid_setup. */ | ||
34 | void add_attribute(const char *uri, bool required, const char *alias = NULL, int count = 1); | ||
35 | |||
36 | /** Returns an attribute fetched for the given type-uri during id_res. */ | ||
37 | std::string get_attribute(const char *uri, int index = 0); | ||
38 | /** Returns the number of values fetched for the given type-uri during id_res. */ | ||
39 | size_t get_attribute_count(const char *uri); | ||
40 | |||
41 | virtual void rp_checkid_hook(basic_openid_message& om); | ||
42 | virtual void rp_id_res_hook(const basic_openid_message& om, | ||
43 | const basic_openid_message& sp); | ||
44 | virtual void op_checkid_hook(const basic_openid_message& inm); | ||
45 | virtual void op_id_res_hook(basic_openid_message& oum); | ||
46 | |||
47 | virtual void checkid_hook(basic_openid_message& om); | ||
48 | virtual void id_res_hook(const basic_openid_message& om, | ||
49 | const basic_openid_message& sp); | ||
50 | virtual void checkid_hook(const basic_openid_message& inm, | ||
51 | basic_openid_message& oum); | ||
52 | |||
53 | /** | ||
54 | * Function called after parsing sreg request to set up response | ||
55 | * fields. The default implementation tries to send as much fields | ||
56 | * as we have. The function is supposed to set the data and | ||
57 | * fields_response. | ||
58 | * @see fields_response | ||
59 | * @param inm incoming openid message | ||
60 | * @param oum outgoing openid message | ||
61 | */ | ||
62 | virtual void setup_response(const basic_openid_message& inm, | ||
63 | basic_openid_message& oum); | ||
64 | |||
65 | virtual void setup_response(); | ||
66 | |||
67 | protected: | ||
68 | /** Stores attributes to request fetching during checkid_setup. */ | ||
69 | struct ax_attr_t { | ||
70 | std::string uri; | ||
71 | std::string alias; | ||
72 | bool required; | ||
73 | int count; | ||
74 | }; | ||
75 | std::vector<ax_attr_t> attrs; | ||
76 | unsigned int alias_count; // auto-incr counter for auto-named aliases | ||
77 | |||
78 | /** Stores results from fetch response during id_res. */ | ||
79 | std::map<std::string, std::vector<std::string> > response_attrs; | ||
80 | }; | ||
81 | } | ||
82 | |||
83 | #endif /* __OPKELE_SREG_H */ | ||
84 | |||