author | Michael Krelin <hacker@klever.net> | 2008-03-04 21:30:28 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-03-04 21:34:13 (UTC) |
commit | 748a2a29a5667f372bf355ed737208a952ff79f0 (patch) (side-by-side diff) | |
tree | 1739374b0cb82ad2758af8feddbef1b6a6bf5eee /include/opkele/oauth | |
parent | 1e3ed01c149aaeed5a64aacff218a5486128fc92 (diff) | |
download | libopkele-748a2a29a5667f372bf355ed737208a952ff79f0.zip libopkele-748a2a29a5667f372bf355ed737208a952ff79f0.tar.gz libopkele-748a2a29a5667f372bf355ed737208a952ff79f0.tar.bz2 |
comitting perliminary oauth consumer api
* added the said consumer api and test consumer
* added trivial map-based opkele::fields_t container
* added UUID flags to libopkele.la build
* fixed query_append so that it doesn't append '?' in absence of query
parameters
* added basic_fields::from_query()
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | include/opkele/oauth/consumer.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/include/opkele/oauth/consumer.h b/include/opkele/oauth/consumer.h new file mode 100644 index 0000000..1e2784c --- a/dev/null +++ b/include/opkele/oauth/consumer.h @@ -0,0 +1,124 @@ +#ifndef __OPKELE_OAUTH_CONSUMER_H +#define __OPKELE_OAUTH_CONSUMER_H + +#include <string> +#include <opkele/types.h> +#include <opkele/oauth.h> + +namespace opkele { + namespace oauth { + using std::string; + + enum oauth_method_t { + oauth_auth_header, oauth_post_body, oauth_url_query + }; + + struct service_endpoint_t { + string url; + string signature_method; + oauth_method_t oauth_method; + + service_endpoint_t(const string& u,const string& sm,oauth_method_t om) + : url(u), signature_method(sm), oauth_method(om) { } + }; + + class basic_provider_endpoints { + public: + + virtual ~basic_provider_endpoints() { } + + virtual const service_endpoint_t& get_request_token_endpoint() const = 0; + virtual const service_endpoint_t& get_authorize_user_endpoint() const = 0; + virtual const service_endpoint_t& get_access_token_endpoint() const = 0; + + virtual service_endpoint_t& get_url_endpoint(service_endpoint_t& sep, + const string& url) const = 0; + }; + + struct http_request_t { + string authorize_header; + string method; + string url; + string body; + + http_request_t(const string& m,const string& u) + : method(m), url(u) { } + }; + + class basic_consumer { + public: + token_t consumer_token; + + basic_consumer(const token_t& ct) + : consumer_token(ct) { } + virtual ~basic_consumer() { } + + virtual const basic_provider_endpoints& get_endpoints() const = 0; + virtual const string allocate_nonce(time_t ts) = 0; + + token_t get_request_token(); + const string get_authorize_url(const token_t& rt,const string& callback=""); + token_t get_access_token(const token_t& rt); + + void prepare_request( + http_request_t& req, + const basic_fields& qf,const basic_fields& pf, + oauth_method_t om,const string& sm, + const token_t *t=0,const string& realm=""); + void prepare_request( + http_request_t& req, + const basic_fields& qf,const basic_fields& pf, + const service_endpoint_t& sep, + const token_t *t=0,const string& realm=""); + + const string signature( + const string& method, + const string& url, + const basic_fields& fields, + const token_t* rt=0); + + token_t acquire_token( + const service_endpoint_t& sep, + const token_t* rt=0); + }; + + class simple_provider_endpoints : public basic_provider_endpoints { + public: + service_endpoint_t sep_request_token; + service_endpoint_t sep_authorize_user; + service_endpoint_t sep_access_token; + service_endpoint_t sep_generic; + + simple_provider_endpoints( + const string& rt,const string& au,const string& at, + const string& sm, + oauth_method_t ams=oauth_post_body, + oauth_method_t amr=oauth_auth_header ) + : sep_request_token(rt,sm,ams), + sep_authorize_user(au,sm,oauth_url_query), + sep_access_token(at,sm,ams), + sep_generic("",sm,amr) { } + + const service_endpoint_t& get_request_token_endpoint() const; + const service_endpoint_t& get_authorize_user_endpoint() const; + const service_endpoint_t& get_access_token_endpoint() const; + service_endpoint_t& get_url_endpoint(service_endpoint_t& sep, + const string& url) const; + }; + + class simple_consumer : public basic_consumer { + public: + simple_provider_endpoints peps; + + simple_consumer(const simple_provider_endpoints& eps, + const token_t& ct) + : basic_consumer(ct), peps(eps) { } + + const basic_provider_endpoints& get_endpoints() const; + const string allocate_nonce(time_t ts); + }; + + } +} + +#endif /* __OPKELE_OAUTH_CONSUMER_H */ |