1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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 */
|