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
|
#include <stdio.h>
#include <stdlib.h>
#include <oauth.h>
#include <strings.h>
static void usage (char *program_name) {
printf(" usage: %s mode url ckey tkey csec tsec\n", program_name);
exit (1);
}
/**
*
* compile:
* gcc -loauth -o oauthsign oauthsign.c
*/
int main (int argc, char **argv) {
char *url; //< the url to sign
char *c_key; //< consumer key
char *c_secret; //< consumer secret
char *t_key; //< token key
char *t_secret ; //< token secret
int mode = 0; //< mode: 0=GET 1=POST
// TODO: use getopt to parse parameters
// FIXME: read secrets from stdin - they show up in ps(1)
// also overwrite memory of secrets before freeing it.
if (argc !=7) usage(argv[0]);
if ( atoi(argv[1]) > 0 ) mode=atoi(argv[1]);// questionable numeric shortcut
else if (!strcasecmp(argv[1],"GET")) mode=1;
else if (!strcasecmp(argv[1],"POST")) mode=2;
else if (!strcasecmp(argv[1],"POSTREQUEST")) mode=4;
else usage(argv[0]);
url = argv[2];
c_key = argv[3];
t_key = argv[4];
c_secret = argv[5];
t_secret = argv[6];
if (mode==1) { // GET
char *geturl = NULL;
geturl = oauth_sign_url2(url, NULL, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
if(geturl) {
printf("%s\n", geturl);
free(geturl);
}
} else { // POST
char *postargs = NULL, *post = NULL;
post = oauth_sign_url2(url, &postargs, OA_HMAC, NULL, c_key, c_secret, t_key, t_secret);
if (!post || !postargs) {
return (1);
}
if (mode==2) { // print postargs only
if (postargs) printf("%s\n", postargs);
} else if (mode==3) { // print url and postargs
if (post && postargs) printf("%s\n%s\n", post, postargs);
} else if (post && postargs) {
char *reply = oauth_http_post(post,postargs);
if(reply){
//write(STDOUT, reply, strlen(reply))
printf("%s\n", reply);
free(reply);
}
}
if(post) free(post);
if(postargs) free(postargs);
}
return (0);
}
|