OAuth library functions 1.0.3
tests/oauthexample.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oauth.h>
int parse_reply(const char *reply, char **token, char **secret) {
int rc;
int ok=1;
char **rv = NULL;
rc = oauth_split_url_parameters(reply, &rv);
qsort(rv, rc, sizeof(char *), oauth_cmpstringp);
if( rc==2
&& !strncmp(rv[0],"oauth_token=",11)
&& !strncmp(rv[1],"oauth_token_secret=",18) ) {
ok=0;
if (token) *token =strdup(&(rv[0][12]));
if (secret) *secret=strdup(&(rv[1][19]));
printf("key: '%s'\nsecret: '%s'\n",*token, *secret); // XXX token&secret may be NULL.
}
if(rv) free(rv);
return ok;
}
int oauth_consumer_example(int use_post) {
const char *request_token_uri = "http://term.ie/oauth/example/request_token.php";
const char *access_token_uri = "http://term.ie/oauth/example/access_token.php";
const char *test_call_uri = "http://term.ie/oauth/example/echo_api.php?method=foo%20bar&bar=baz";
const char *c_key = "key"; //< consumer key
const char *c_secret = "secret"; //< consumer secret
char *t_key = NULL; //< access token key
char *t_secret = NULL; //< access token secret
char *req_url = NULL;
char *postarg = NULL;
char *reply = NULL;
printf("Request token..\n");
if (use_post) { // HTTP POST
req_url = oauth_sign_url2(request_token_uri, &postarg, OA_HMAC, NULL, c_key, c_secret, NULL, NULL);
reply = oauth_http_post(req_url,postarg);
} else { // HTTP GET
req_url = oauth_sign_url2(request_token_uri, NULL, OA_HMAC, NULL, c_key, c_secret, NULL, NULL);
reply = oauth_http_get(req_url,postarg);
}
if (req_url) free(req_url);
if (postarg) free(postarg);
if (!reply) return(1);
if (parse_reply(reply, &t_key, &t_secret)) return(2);
free(reply);
// The Request Token provided above is already authorized, for this test server
// so we may use it to request an Access Token right away.
printf("Access token..\n");
if (use_post) {
req_url = oauth_sign_url2(access_token_uri, &postarg, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
reply = oauth_http_post(req_url,postarg);
} else {
req_url = oauth_sign_url2(access_token_uri, NULL, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
reply = oauth_http_get(req_url,postarg);
}
if (req_url) free(req_url);
if (postarg) free(postarg);
if (!reply) return(3);
if(t_key) free(t_key);
if(t_secret) free(t_secret);
if (parse_reply(reply, &t_key, &t_secret)) return(4);
free(reply);
printf("make some request..\n");
if (use_post) {
req_url = oauth_sign_url2(test_call_uri, &postarg, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
reply = oauth_http_post(req_url,postarg);
} else {
req_url = oauth_sign_url2(test_call_uri, NULL, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
reply = oauth_http_get(req_url,postarg);
}
printf("query:'%s'\n",req_url);
printf("reply:'%s'\n",reply);
if(req_url) free(req_url);
if(postarg) free(postarg);
if (strcmp(reply,"bar=baz&method=foo+bar")) return (5);
if(reply) free(reply);
if(t_key) free(t_key);
if(t_secret) free(t_secret);
return(0);
}
int main (int argc, char **argv) {
switch(oauth_consumer_example(0)) {
case 1:
printf("HTTP request for an oauth request-token failed.\n");
break;
case 2:
printf("did not receive a request-token.\n");
break;
case 3:
printf("HTTP request for an oauth access-token failed.\n");
break;
case 4:
printf("did not receive an access-token.\n");
break;
case 5:
printf("test call 'echo-api' did not respond correctly.\n");
break;
default:
printf("request ok.\n");
break;
}
return(0);
}
OAuth.net implementation in POSIX-C.
int oauth_cmpstringp(const void *p1, const void *p2)
string compare function for oauth parameters.
@ OA_HMAC
use HMAC-SHA1 request signing method
Definition oauth.h:67
int oauth_split_url_parameters(const char *url, char ***argv)
splits the given url into a parameter array.
char * oauth_http_get(const char *u, const char *q) attribute_deprecated
do a HTTP GET request, wait for it to finish and return the content of the reply.
char * oauth_sign_url2(const char *url, char **postargs, OAuthMethod method, const char *http_method, const char *c_key, const char *c_secret, const char *t_key, const char *t_secret)
calculate OAuth-signature for a given HTTP request URL, parameters and oauth-tokens.
char * oauth_http_post(const char *u, const char *p) attribute_deprecated
do a HTTP POST request, wait for it to finish and return the content of the reply.