int weibo_oauth_api_call(struct unim_login_info *login_info, struct unim_api_call_info *api_call_info) { char *req_param, *reply; int rc = -1; int argc = 0; char **argv = NULL; int i; argc = oauth_split_url_parameters(api_call_info->uri, &argv); if (login_info->request_added_argc) { for (i = 0; i < login_info->request_added_argc; i++) { oauth_add_param_to_array(&argc, &argv, login_info->request_added_argv[i]); } } req_param = oauth_serialize_url_parameters(argc, argv); printf("req_param: %s\n", req_param); reply = oauth_http_get(api_call_info->uri, req_param); if (reply) { printf("HTTP-reply:\n\t%s\n", reply); api_call_info->result = reply; rc = 0; } if (req_param) free(req_param); return rc; }
int weibo_statuses_update(struct unim_login_info *login_info, struct unim_api_call_info *api_call_info) { char *req_param, *reply; int rc = -1; int argc = 0; char **argv = NULL; int i; argc = oauth_split_url_parameters(api_call_info->uri, &argv); if (login_info->request_added_argc) { for (i = 0; i < login_info->request_added_argc; i++) { oauth_add_param_to_array(&argc, &argv, login_info->request_added_argv[i]); } } req_param = oauth_serialize_url_parameters(argc, argv); reply = oauth_http_post(api_call_info->uri, req_param); if (reply) { /* TODO: check replay! */ api_call_info->result = reply; rc = 0; } if (req_param) free(req_param); return rc; }
int weibo_oauth_access(struct unim_login_info *login_info) { char *req_param, *reply; int rc = -1; int argc = 0; char **argv = NULL; char *postargs = NULL; int i; argc = oauth_split_url_parameters(login_info->access_token_uri, &argv); if (login_info->request_added_argc) { for (i = 0; i < login_info->request_added_argc; i++) { oauth_add_param_to_array(&argc, &argv, login_info->request_added_argv[i]); } } req_param = oauth_serialize_url_parameters(argc, argv); printf("req_param: %s\n", req_param); reply = oauth_http_post(login_info->access_token_uri, req_param); if (reply) { JsonParser *jparser; GError *err; gboolean rb; printf("HTTP-reply:\n\t%s\n", reply); jparser = json_parser_new(); rb = json_parser_load_from_data(jparser, reply, strlen(reply), &err); if (!rb) { printf("json parse failed! err: %s\n", err->message); g_object_unref(jparser); goto error_out; } JsonReader *jreader = json_reader_new(json_parser_get_root(jparser)); rb = json_reader_read_member(jreader, "access_token"); if (rb) { login_info->access_token_key = strdup(json_reader_get_string_value(jreader)); rc = 0; } g_object_unref(jreader); } error_out: if (req_param) free(req_param); if (reply) free(reply); if (postargs) free(postargs); return rc; }
/* * creates base string and returns signature. * @param mode * * @return encoded string otherwise NULL * The caller must free the returned string. */ char *process_array(int argc, char **argv, char *method, int mode, oauthparam *op) { char *base_url; char *okey, *odat, *sign; // sort parameters qsort(&argv[1], argc-1, sizeof(char *), oauth_cmpstringp); // serialize URL base_url= oauth_serialize_url_parameters(argc, argv); if (mode&16) fprintf(stdout, "%s\n",base_url); else if (want_verbose) fprintf(stderr, "base-url=%s\n",base_url); if (mode&16) exit(0); // generate signature okey = oauth_catenc(2, op->c_secret, op->t_secret); odat = oauth_catenc(3, method, argv[0], base_url); if (mode&8) fprintf(stdout, "%s\n",odat); else if (want_verbose) fprintf(stderr, "base-string=%s\n",odat); if (mode&32) fprintf(stdout, "%s\n",okey); else if (want_verbose) fprintf(stderr, "secret-string=%s\n",okey); if (mode&40) exit(0); switch(op->signature_method) { case OA_RSA: sign = oauth_sign_rsa_sha1(odat,op->c_secret); // TODO don't re-use consumer-key; allow to read from file. break; case OA_PLAINTEXT: sign = oauth_sign_plaintext(odat,okey); break; default: sign = oauth_sign_hmac_sha1(odat,okey); } free(odat); free(okey); if (mode&64 && !want_verbose) fprintf(stdout, "%s\n",sign); //if (mode&64) exit(0); // TODO return sign; // needs to be free()d }