Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
/*
 * 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
}