summaryrefslogtreecommitdiff
path: root/protocols/Twitter/oauth/tests/oauthsign.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Twitter/oauth/tests/oauthsign.c')
-rw-r--r--protocols/Twitter/oauth/tests/oauthsign.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/protocols/Twitter/oauth/tests/oauthsign.c b/protocols/Twitter/oauth/tests/oauthsign.c
new file mode 100644
index 0000000000..e52d62c8b7
--- /dev/null
+++ b/protocols/Twitter/oauth/tests/oauthsign.c
@@ -0,0 +1,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);
+}