/soc/2015/nakulgulati/main: 610d64c48e9b: hangouts: OAuth - auth...

[email protected]
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 610d64c48e9b07008ddad7ab5e7cce41140dcced
Author:	 Nakul Gulati
Date:	 2015-06-23 14:52 +0800
Branch:	 hangouts
URL: https://hg.pidgin.im/soc/2015/nakulgulati/main/rev/610d64c48e9b

Description:

hangouts: OAuth - auth_with_code, auth_with_refresh_token

diffstat:

 libpurple/protocols/hangouts/auth.c     |  81 ++++++++++++++++++++++++++++++--
 libpurple/protocols/hangouts/auth.h     |   8 ++-
 libpurple/protocols/hangouts/hangouts.c |   2 +-
 3 files changed, 81 insertions(+), 10 deletions(-)

diffs (164 lines):

diff --git a/libpurple/protocols/hangouts/auth.c b/libpurple/protocols/hangouts/auth.c
--- a/libpurple/protocols/hangouts/auth.c
+++ b/libpurple/protocols/hangouts/auth.c
@@ -45,13 +45,13 @@ typedef struct
 } _hangouts_oauth_token_request_data;
 
 static void
-hangouts_got_token_cb(PurpleHttpConnection *http_conn,
+hangouts_auth_with_authentication_code_cb(PurpleHttpConnection *http_conn,
 	PurpleHttpResponse *response, gpointer user_data){
 	purple_debug_misc("hangouts-prpl", "http req call back");
 
 	JsonParser *parser;
 	JsonObject *result;
-	gchar *error;
+	gchar *error, *access_token, *refresh_token;
 
 	gchar *raw_res = purple_http_response_get_data(response,NULL);
 
@@ -60,17 +60,26 @@ hangouts_got_token_cb(PurpleHttpConnecti
 	result = json_node_get_object(json_parser_get_root(parser));
 
 	if (json_object_has_member(result, "error"))
-		//throw error
+		/*TODO Throw error*/
 		error = json_object_get_string_member(result, "error");
 
-	purple_debug_misc("hangouts-prpl", "response data: %s \n error: %s",raw_res, error);
+	if (json_object_has_member(result, "access_token"))
+		/*TODO store token for api_access*/
+		access_token = json_object_get_string_member(result, "access_token");
+
+	if (json_object_has_member(result, "refresh_token"))
+			/*TODO store token for refresh request*/
+		refresh_token = json_object_get_string_member(result, "refresh_token");
+
+
+	purple_debug_misc("hangouts-prpl", "response data: %s \n error: %s, token: %s",raw_res, error, access_token);
 
 
 }
 
 
 void
-hangouts_request_auth(PurpleConnection *gc)
+hangouts_auth_with_authentication_code(PurpleConnection *gc)
 {
 	gchar *request_data;
 	gchar *auth_code;
@@ -87,7 +96,7 @@ hangouts_request_auth(PurpleConnection *
 			OAUTH2_CLIENT_ID,
 			OAUTH2_CLIENT_SECRET,
 			auth_code,
-			OAUTH2_GRANT_TYPE,
+			OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE,
 			OAUTH2_REDIRECT_URI);
 
 	PurpleHttpRequest *request;
@@ -98,9 +107,67 @@ hangouts_request_auth(PurpleConnection *
 	purple_http_request_header_set(request, "Content-Type", "application/x-www-form-urlencoded");
 	purple_http_request_set_contents(request, request_data, -1);
 
-	purple_http_request(gc,request,hangouts_got_token_cb,NULL);
+	purple_http_request(gc,request,hangouts_auth_with_authentication_code_cb,NULL);
 
 }
 
+static void
+hangouts_auth_with_refresh_token_cb(PurpleHttpConnection *http_conn,
+	PurpleHttpResponse *response, gpointer user_data){
+	purple_debug_misc("hangouts-prpl", "hangouts_auth_with_refresh_token");
 
+	JsonParser *parser;
+	JsonObject *result;
+	gchar *error, *access_token;
 
+	gchar *raw_res = purple_http_response_get_data(response,NULL);
+
+	parser = json_parser_new();
+	json_parser_load_from_data(parser, raw_res, -1, NULL);
+	result = json_node_get_object(json_parser_get_root(parser));
+
+	if (json_object_has_member(result, "error"))
+		/*TODO Throw error*/
+		error = json_object_get_string_member(result, "error");
+
+	if (json_object_has_member(result, "access_token"))
+		/*TODO store token for refresh request*/
+		access_token = json_object_get_string_member(result, "access_token");
+
+	purple_debug_misc("hangouts-prpl", "response data: %s \n error: %s, token: %s",raw_res, error, access_token);
+
+
+}
+
+void
+hangouts_auth_with_refresh_token(PurpleConnection *gc)
+{
+	/*TODO get refresh from data*/
+
+	gchar *request_data;
+	gchar *refresh_token;
+	PurpleAccount *account = purple_connection_get_account(gc);
+
+	request_data = g_strdup_printf(
+			"client_id=%s&"
+			"client_secret=%s&"
+			"grant_type=%s&"
+			"refresh_token=%s",
+			OAUTH2_CLIENT_ID,
+			OAUTH2_CLIENT_SECRET,
+			OAUTH2_GRANT_TYPE_REFRESH_CODE,
+			refresh_token);
+
+	PurpleHttpRequest *request;
+	const char *method = "POST";
+
+	request = purple_http_request_new(OAUTH2_TOKEN_REQUEST_URL);
+	purple_http_request_set_method(request,method);
+	purple_http_request_header_set(request, "Content-Type", "application/x-www-form-urlencoded");
+	purple_http_request_set_contents(request, request_data, -1);
+
+	purple_http_request(gc,request,hangouts_auth_with_refresh_token_cb,NULL);
+
+}
+
+
diff --git a/libpurple/protocols/hangouts/auth.h b/libpurple/protocols/hangouts/auth.h
--- a/libpurple/protocols/hangouts/auth.h
+++ b/libpurple/protocols/hangouts/auth.h
@@ -33,8 +33,9 @@ redirect_uri=" OAUTH2_REDIRECT_URI \
 "&client_id=" OAUTH2_CLIENT_ID "&scope=" OAUTH2_SCOPE
 
 #define OAUTH2_TOKEN_REQUEST_URL "https://accounts.google.com/o/oauth2/token"
-#define OAUTH2_GRANT_TYPE "authorization_code"
 
+#define OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE "authorization_code"
+#define OAUTH2_GRANT_TYPE_REFRESH_CODE "refresh_token"
 
 typedef struct _hangouts_oauth_data hangouts_oauth_data;
 
@@ -42,6 +43,9 @@ typedef struct _hangouts_oauth_token_req
 
 
 void hangouts_oauth_data_free(hangouts_oauth_data *data);
-void hangouts_request_auth(PurpleConnection *gc);
+void hangouts_auth_with_authentication_code(PurpleConnection *gc);
+static void hangouts_auth_with_authentication_code_cb(PurpleHttpConnection *http_conn,
+		PurpleHttpResponse *response, gpointer user_data);
+void hangouts_auth_with_refresh_token(PurpleConnection *gc);
 
 #endif /* _AUTH_H_ */
diff --git a/libpurple/protocols/hangouts/hangouts.c b/libpurple/protocols/hangouts/hangouts.c
--- a/libpurple/protocols/hangouts/hangouts.c
+++ b/libpurple/protocols/hangouts/hangouts.c
@@ -48,7 +48,7 @@ hangouts_login(PurpleAccount *acct)
 
 	purple_debug_misc("hangouts-prpl", "login; account username: %s;",username);
 
-	hangouts_request_auth(gc);
+	hangouts_auth_with_authentication_code(gc);
 
 }
 

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.