summaryrefslogtreecommitdiffabout
path: root/lib/oauth-consumer.cc
Side-by-side diff
Diffstat (limited to 'lib/oauth-consumer.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/oauth-consumer.cc46
1 files changed, 43 insertions, 3 deletions
diff --git a/lib/oauth-consumer.cc b/lib/oauth-consumer.cc
index d717ed3..bb4e89b 100644
--- a/lib/oauth-consumer.cc
+++ b/lib/oauth-consumer.cc
@@ -156,7 +156,7 @@ namespace opkele {
return rv;
}
- void basic_consumer::prepare_request(
+ http_request_t& basic_consumer::prepare_request(
http_request_t& req,
const basic_fields& qf,const basic_fields& pf,
oauth_method_t om,const string& sm,
@@ -209,19 +209,59 @@ namespace opkele {
}else
throw opkele::exception(OPKELE_CP_ /* TODO: specialize */
"Unknown oauth method");
+ return req;
}
- void basic_consumer::prepare_request(
+ http_request_t& basic_consumer::prepare_request(
http_request_t& req,
const basic_fields& qf,const basic_fields& pf,
const service_endpoint_t& sep,
const token_t *t,const string& realm) {
- prepare_request(
+ return prepare_request(
req, qf, pf,
sep.oauth_method,sep.signature_method,
t,realm);
}
+ http_request_t& basic_consumer::prepare_request(
+ http_request_t& req,
+ const basic_fields& qf,const basic_fields& pf,
+ const token_t *t,const string& realm) {
+ service_endpoint_t sep;
+ return prepare_request(
+ req, qf, pf,
+ get_endpoints().get_url_endpoint(sep,req.url),
+ t, realm );
+ }
+
+ void http_request_t::setup_curl(CURL *curl) {
+ CURLcode r;
+ r = curl_easy_setopt(curl,CURLOPT_URL,url.c_str());
+ if(r)
+ throw exception_curl(OPKELE_CP_ "failed to set curly urlie",r);
+ if(method=="POST") {
+ (r = curl_easy_setopt(curl,CURLOPT_POST,1))
+ || (r = curl_easy_setopt(curl,CURLOPT_POSTFIELDS,body.c_str()))
+ || (r = curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,body.size()));
+ }else if(method=="GET") {
+ r = curl_easy_setopt(curl,CURLOPT_HTTPGET,1);
+ }else if(method=="HEAD") {
+ r = curl_easy_setopt(curl,CURLOPT_NOBODY,1);
+ }else /* TODO: specialize exception */
+ throw exception(OPKELE_CP_ "don't know how to handle http method");
+ if(r)
+ throw exception_curl(OPKELE_CP_ "failed to set curly options",r);
+ if(!authorize_header.empty()) {
+ r = curl_easy_setopt(curl,CURLOPT_HTTPHEADER,(curl_slist*)(
+ _curl_headers_list = curl_slist_append(
+ 0,string("Authorization: "+authorize_header).c_str()
+ )
+ ) );
+ if(r)
+ throw exception_curl(OPKELE_CP_ "failed to setup curlie header");
+ }
+ }
+
const basic_provider_endpoints& simple_consumer::get_endpoints() const {
return peps; }