#ifndef __OPKELE_OAUTH_CONSUMER_H #define __OPKELE_OAUTH_CONSUMER_H #include #include #include 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 */