libpurple/protocols/gg/oauth/oauth-purple.c

Mon, 16 Sep 2013 11:58:46 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Mon, 16 Sep 2013 11:58:46 +0200
changeset 34439
1eeaf6ac7ec0
parent 34287
6cd0c77b1f6a
child 34935
686fa55b0deb
permissions
-rw-r--r--

Gadu-Gadu: don't Werror

33349
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
1 /* purple
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
2 *
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
5 * source distribution.
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
6 *
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
7 * Rewritten from scratch during Google Summer of Code 2012
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
8 * by Tomek Wasilczyk (http://www.wasilczyk.pl).
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
9 *
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
10 * Previously implemented by:
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
11 * - Arkadiusz Miskiewicz <misiek@pld.org.pl> - first implementation (2001);
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
12 * - Bartosz Oler <bartosz@bzimage.us> - reimplemented during GSoC 2005;
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
13 * - Krzysztof Klinikowski <grommasher@gmail.com> - some parts (2009-2011).
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
14 *
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
15 * This program is free software; you can redistribute it and/or modify
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
16 * it under the terms of the GNU General Public License as published by
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
17 * the Free Software Foundation; either version 2 of the License, or
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
18 * (at your option) any later version.
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
19 *
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
20 * This program is distributed in the hope that it will be useful,
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
23 * GNU General Public License for more details.
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
24 *
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
25 * You should have received a copy of the GNU General Public License
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
26 * along with this program; if not, write to the Free Software
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
27 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
28 */
d4a017428f4d Gadu-Gadu: missing copyright notes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33343
diff changeset
29
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
30 #include "oauth-purple.h"
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
31
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
32 #include "oauth.h"
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
33 #include "../utils.h"
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
34 #include "../xml.h"
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
35
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
36 #include <debug.h>
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
37 #include <http.h>
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
38
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
39 #define GGP_OAUTH_RESPONSE_MAX 10240
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
40
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
41 typedef struct
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
42 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
43 PurpleConnection *gc;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
44 ggp_oauth_request_cb callback;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
45 gpointer user_data;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
46 gchar *token;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
47 gchar *token_secret;
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
48
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
49 gchar *sign_method, *sign_url;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
50 } ggp_oauth_data;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
51
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
52 static void ggp_oauth_data_free(ggp_oauth_data *data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
53
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
54 static void ggp_oauth_request_token_got(PurpleHttpConnection *http_conn,
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
55 PurpleHttpResponse *response, gpointer user_data);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
56
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
57 static void ggp_oauth_authorization_done(PurpleHttpConnection *http_conn,
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
58 PurpleHttpResponse *response, gpointer user_data);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
59
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
60 static void ggp_oauth_access_token_got(PurpleHttpConnection *http_conn,
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
61 PurpleHttpResponse *response, gpointer user_data);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
62
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
63 static void ggp_oauth_data_free(ggp_oauth_data *data)
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
64 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
65 g_free(data->token);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
66 g_free(data->token_secret);
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
67 g_free(data->sign_method);
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
68 g_free(data->sign_url);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
69 g_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
70 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
71
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
72 void ggp_oauth_request(PurpleConnection *gc, ggp_oauth_request_cb callback,
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
73 gpointer user_data, const gchar *sign_method, const gchar *sign_url)
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
74 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
75 PurpleAccount *account = purple_connection_get_account(gc);
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
76 PurpleHttpRequest *req;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
77 char *auth;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
78 const char *method = "POST";
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
79 const char *url = "http://api.gadu-gadu.pl/request_token";
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
80 ggp_oauth_data *data;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
81
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
82 g_return_if_fail((method == NULL) == (url == NULL));
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
83
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
84 purple_debug_misc("gg", "ggp_oauth_request: requesting token...\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
85
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
86 auth = gg_oauth_generate_header(method, url,
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
87 purple_account_get_username(account),
34106
1b0c94670bcc Merge with default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33351
diff changeset
88 purple_connection_get_password(gc), NULL, NULL);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
89
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
90 data = g_new0(ggp_oauth_data, 1);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
91 data->gc = gc;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
92 data->callback = callback;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
93 data->user_data = user_data;
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
94 data->sign_method = g_strdup(sign_method);
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
95 data->sign_url = g_strdup(sign_url);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
96
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
97 req = purple_http_request_new(url);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
98 purple_http_request_set_max_len(req, GGP_OAUTH_RESPONSE_MAX);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
99 purple_http_request_set_method(req, method);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
100 purple_http_request_header_set(req, "Authorization", auth);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
101 purple_http_request(gc, req, ggp_oauth_request_token_got, data);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
102 purple_http_request_unref(req);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
103
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
104 free(auth);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
105 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
106
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
107 static void ggp_oauth_request_token_got(PurpleHttpConnection *http_conn,
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
108 PurpleHttpResponse *response, gpointer user_data)
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
109 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
110 ggp_oauth_data *data = user_data;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
111 PurpleAccount *account;
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
112 PurpleHttpRequest *req;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
113 xmlnode *xml;
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
114 gchar *request_data;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
115 gboolean succ = TRUE;
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
116 const gchar *xml_raw;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
117
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
118 if (!PURPLE_CONNECTION_IS_VALID(data->gc))
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
119 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
120 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
121 return;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
122 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
123 account = purple_connection_get_account(data->gc);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
124
34287
6cd0c77b1f6a HTTP: successful is spelled with one l
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34232
diff changeset
125 if (!purple_http_response_is_successful(response))
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
126 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
127 purple_debug_error("gg", "ggp_oauth_request_token_got: "
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
128 "requested token not received\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
129 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
130 return;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
131 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
132
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
133 purple_debug_misc("gg", "ggp_oauth_request_token_got: "
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
134 "got request token, doing authorization...\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
135
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
136 xml_raw = purple_http_response_get_data(response, NULL);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
137 xml = xmlnode_from_str(xml_raw, -1);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
138 if (xml == NULL)
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
139 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
140 purple_debug_error("gg", "ggp_oauth_request_token_got: "
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
141 "invalid xml\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
142 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
143 return;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
144 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
145
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
146 succ &= ggp_xml_get_string(xml, "oauth_token", &data->token);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
147 succ &= ggp_xml_get_string(xml, "oauth_token_secret",
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
148 &data->token_secret);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
149 xmlnode_free(xml);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
150 if (!succ)
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
151 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
152 purple_debug_error("gg", "ggp_oauth_request_token_got: "
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
153 "invalid xml - token is not present\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
154 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
155 return;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
156 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
157
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
158 request_data = g_strdup_printf(
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
159 "callback_url=http://www.mojageneracja.pl&request_token=%s&"
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
160 "uin=%s&password=%s", data->token,
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
161 purple_account_get_username(account),
34106
1b0c94670bcc Merge with default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33351
diff changeset
162 purple_connection_get_password(data->gc));
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
163
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
164 req = purple_http_request_new("https://login.gadu-gadu.pl/authorize");
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
165 purple_http_request_set_max_len(req, GGP_OAUTH_RESPONSE_MAX);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
166 // we don't need any results, nor 302 redirection
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
167 purple_http_request_set_max_redirects(req, 0);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
168 purple_http_request_set_method(req, "POST");
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
169 purple_http_request_header_set(req, "Content-Type", "application/x-www-form-urlencoded");
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
170 purple_http_request_set_contents(req, request_data, -1);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
171 purple_http_request(data->gc, req, ggp_oauth_authorization_done, data);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
172 purple_http_request_unref(req);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
173
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
174 g_free(request_data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
175 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
176
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
177 static void ggp_oauth_authorization_done(PurpleHttpConnection *http_conn,
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
178 PurpleHttpResponse *response, gpointer user_data)
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
179 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
180 ggp_oauth_data *data = user_data;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
181 PurpleAccount *account;
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
182 PurpleHttpRequest *req;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
183 char *auth;
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
184 const char *method = "POST";
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
185 const char *url = "http://api.gadu-gadu.pl/access_token";
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
186 int response_code;
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
187
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
188 if (!PURPLE_CONNECTION_IS_VALID(data->gc))
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
189 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
190 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
191 return;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
192 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
193 account = purple_connection_get_account(data->gc);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
194
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
195 response_code = purple_http_response_get_code(response);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
196 if (response_code != 302)
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
197 {
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
198 purple_debug_error("gg", "ggp_oauth_authorization_done: "
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
199 "failed (code = %d)", response_code);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
200 ggp_oauth_data_free(data);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
201 return;
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
202 }
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
203
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
204 purple_debug_misc("gg", "ggp_oauth_authorization_done: "
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
205 "authorization done, requesting access token...\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
206
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
207 auth = gg_oauth_generate_header(method, url,
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
208 purple_account_get_username(account),
34106
1b0c94670bcc Merge with default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33351
diff changeset
209 purple_connection_get_password(data->gc),
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
210 data->token, data->token_secret);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
211
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
212 req = purple_http_request_new(url);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
213 purple_http_request_set_max_len(req, GGP_OAUTH_RESPONSE_MAX);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
214 purple_http_request_set_method(req, method);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
215 purple_http_request_header_set(req, "Authorization", auth);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
216 purple_http_request(data->gc, req, ggp_oauth_access_token_got, data);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
217 purple_http_request_unref(req);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
218
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
219 free(auth);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
220 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
221
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
222 static void ggp_oauth_access_token_got(PurpleHttpConnection *http_conn,
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
223 PurpleHttpResponse *response, gpointer user_data)
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
224 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
225 ggp_oauth_data *data = user_data;
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
226 gchar *token, *token_secret;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
227 xmlnode *xml;
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
228 const gchar *xml_raw;
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
229 gboolean succ = TRUE;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
230
34232
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
231 xml_raw = purple_http_response_get_data(response, NULL);
a5517f235e0f HTTP: migrate purple_util_fetch_url_request to new API for GG prpl
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34148
diff changeset
232 xml = xmlnode_from_str(xml_raw, -1);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
233 if (xml == NULL)
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
234 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
235 purple_debug_error("gg", "ggp_oauth_access_token_got: "
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
236 "invalid xml\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
237 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
238 return;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
239 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
240
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
241 succ &= ggp_xml_get_string(xml, "oauth_token", &token);
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
242 succ &= ggp_xml_get_string(xml, "oauth_token_secret",
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
243 &token_secret);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
244 xmlnode_free(xml);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
245 if (!succ || strlen(token) < 10)
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
246 {
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
247 purple_debug_error("gg", "ggp_oauth_access_token_got: "
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
248 "invalid xml - token is not present\n");
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
249 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
250 return;
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
251 }
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
252
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
253 if (data->sign_url)
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
254 {
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
255 PurpleAccount *account;
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
256 gchar *auth;
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
257
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
258 purple_debug_misc("gg", "ggp_oauth_access_token_got: "
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
259 "got access token, returning signed url\n");
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
260
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
261 account = purple_connection_get_account(data->gc);
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
262 auth = gg_oauth_generate_header(
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
263 data->sign_method, data->sign_url,
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
264 purple_account_get_username(account),
34106
1b0c94670bcc Merge with default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33351
diff changeset
265 purple_connection_get_password(data->gc),
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
266 token, token_secret);
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
267 data->callback(data->gc, auth, data->user_data);
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
268 }
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
269 else
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
270 {
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
271 purple_debug_misc("gg", "ggp_oauth_access_token_got: "
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
272 "got access token, returning it\n");
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
273 data->callback(data->gc, token, data->user_data);
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
274 }
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
275
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
276 g_free(token);
33343
09f740724036 Gadu-Gadu: extended OAuth support, initial support for gg10.5 public directory
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33329
diff changeset
277 g_free(token_secret);
33329
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
278 ggp_oauth_data_free(data);
cf23e0f1861a Gadu-Gadu: OAuth support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
279 }

mercurial