/soc/2015/nakulgulati/main: f8e963ad210e: hangouts: alternate au...

[email protected]
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: f8e963ad210eb7eedb8873149d03b97e477e3ff9
Author:	 Nakul Gulati
Date:	 2015-07-29 04:34 +0800
Branch:	 hangouts
URL: https://hg.pidgin.im/soc/2015/nakulgulati/main/rev/f8e963ad210e

Description:

hangouts: alternate auth approach, refactor

diffstat:

 libpurple/protocols/hangouts/api.c      |   52 +++--
 libpurple/protocols/hangouts/api.h      |    2 +-
 libpurple/protocols/hangouts/auth.c     |  293 ++++++++-----------------------
 libpurple/protocols/hangouts/auth.h     |   23 +-
 libpurple/protocols/hangouts/hangouts.c |  155 +++++++--------
 5 files changed, 186 insertions(+), 339 deletions(-)

diffs (truncated from 773 to 300 lines):

diff --git a/libpurple/protocols/hangouts/api.c b/libpurple/protocols/hangouts/api.c
--- a/libpurple/protocols/hangouts/api.c
+++ b/libpurple/protocols/hangouts/api.c
@@ -34,8 +34,10 @@ enum _HangoutsConversationOffTheRecordSt
 struct _HangoutsApiPrivate
 {
   PurpleConnection *gc;
-  HangoutsAuthCookies *cookies;
+  //HangoutsAuthCookies *cookies
+  PurpleHttpCookieJar *cookie_jar;
 
+  gchar *galx;
   gchar *api_key;
   gchar *access_token;
   gchar *header_date;
@@ -61,8 +63,11 @@ hangouts_api_dispose (GObject *obj)
       purple_http_conn_cancel_all (priv->gc);
     }
 
-  hangouts_auth_cookies_free (priv->cookies);
+  //hangouts_auth_cookies_free (priv->cookies);
 
+  purple_http_cookie_free (priv->cookie_jar);
+
+  g_free (priv->galx);
   g_free (priv->access_token);
   g_free (priv->api_key);
   g_free (priv->client_id);
@@ -76,6 +81,7 @@ hangouts_api_dispose (GObject *obj)
 static void
 hangouts_api_class_init (HangoutsApiClass *klass)
 {
+  purple_debug_misc ("hangouts-prpl", "new class init");
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   g_type_class_add_private (klass, sizeof(HangoutsApiPrivate));
   gobject_class->dispose = hangouts_api_dispose;
@@ -84,6 +90,7 @@ hangouts_api_class_init (HangoutsApiClas
 static void
 hangouts_api_init (HangoutsApi *api)
 {
+  purple_debug_misc ("hangouts-prpl", "api init");
   HangoutsApiPrivate *priv;
 
   priv = G_TYPE_INSTANCE_GET_PRIVATE (api, HANGOUTS_TYPE_API,
@@ -94,6 +101,7 @@ hangouts_api_init (HangoutsApi *api)
 HangoutsApi *
 hangouts_api_new (PurpleConnection *gc)
 {
+  purple_debug_misc ("hangouts-prpl", "new api obj");
   HangoutsApi *api;
   HangoutsApiPrivate *priv;
 
@@ -144,21 +152,21 @@ hangouts_api_request (HangoutsApi *api, 
     }
 
   purple_http_request_header_add (request, "content-type", content_type);
-  purple_http_request_header_add (
-      request, "Authorization",
-      hangouts_auth_get_authorization_header (priv->access_token));
+  /*purple_http_request_header_add (
+   request, "Authorization",
+   hangouts_auth_get_authorization_header (priv->access_token));*/
   purple_http_request_set_method (request, "POST");
-  purple_http_request_set_contents (request, request_body);
+  purple_http_request_set_contents (request, request_body, -1);
   purple_http_request (priv->gc, request, info->callback, api);
 }
 
 void
 hangouts_api_getselfinfo (HangoutsApi *api)
 {
-  static const HangoutsApiHttpInfo *info =
-    {
+  /*static const HangoutsApiHttpInfo *info =
+   {
 
-    };
+   };*/
 
   gchar *url_endpoint, *header, *body;
 
@@ -166,16 +174,16 @@ hangouts_api_getselfinfo (HangoutsApi *a
   header = hangouts_api_get_request_header (api);
   body = g_strdup_printf ("[%s,[], []]", header);
 
-  hangouts_api_request (api, info, url_endpoint, TRUE, body);
+  //hangouts_api_request (api, info, url_endpoint, TRUE, body);
 }
 
 void
 hangouts_api_syncallevents (HangoutsApi *api)
 {
-  static const HangoutsApiHttpInfo *info =
-    {
+  /* static const HangoutsApiHttpInfo *info =
+   {
 
-    };
+   };*/
 
   gchar *url_endpoint, *header, *body;
   GTimeVal *time_stamp;
@@ -195,7 +203,7 @@ hangouts_api_syncallevents (HangoutsApi 
 			  "]",
 			  header, g_time_val_to_iso8601 (time_stamp));
 
-  hangouts_api_request (api, info, url_endpoint, FALSE, body);
+  //hangouts_api_request (api, info, url_endpoint, FALSE, body);
 }
 
 void
@@ -204,10 +212,10 @@ hangouts_api_sendchatmessage (HangoutsAp
 			      HangoutsOffTheRecordStatus otr_status)
 {
   //TODO: segments should be in the protojson format
-  static const HangoutsApiHttpInfo *info =
-    {
+  /*static const HangoutsApiHttpInfo *info =
+   {
 
-    };
+   };*/
 
   guint32 client_generated_id;
   gchar *url_endpoint, *image_info, *body, *header;
@@ -235,17 +243,17 @@ hangouts_api_sendchatmessage (HangoutsAp
 			  header, segments, image_info, conversation_id,
 			  client_generated_id, otr_status);
 
-  hangouts_api_request (api, info, url_endpoint, FALSE, body);
+  //hangouts_api_request (api, info, url_endpoint, FALSE, body);
 }
 
 void
 hangouts_api_setactiveclient (HangoutsApi *api, gboolean is_active,
 			      gchar *timeout_sec)
 {
-  static const HangoutsApiHttpInfo *info =
-    {
+  /*static const HangoutsApiHttpInfo *info =
+   {
 
-    };
+   };*/
 
   gchar *url_endpoint, *is_active_flag, *body, *header;
   HangoutsApiPrivate *priv;
@@ -268,6 +276,6 @@ hangouts_api_setactiveclient (HangoutsAp
 			  header, is_active_flag, priv->email, priv->client_id,
 			  timeout_sec);
 
-  hangouts_api_request (api, info, url_endpoint, FALSE, body);
+  //hangouts_api_request (api, info, url_endpoint, FALSE, body);
 }
 
diff --git a/libpurple/protocols/hangouts/api.h b/libpurple/protocols/hangouts/api.h
--- a/libpurple/protocols/hangouts/api.h
+++ b/libpurple/protocols/hangouts/api.h
@@ -57,7 +57,7 @@ struct _HangoutsApi
 
 struct _HangoutsApiClass
 {
-  GObject parent;
+  GObjectClass parent;
 };
 
 GType
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
@@ -22,246 +22,103 @@
 #include "http.h"
 #include "http.c"
 #include "auth.h"
+#include "api.c"
 
 #include <json-glib/json-glib.h>
 
-typedef struct
+struct _HangoutsAuthCookies
 {
-	PurpleConnection *gc;
-	gpointer user_data;
-	gchar *token;
-	gchar *token_secret;
-	gchar *sign_method;
-	gchar *sign_url;
-} _hangouts_oauth_data;
+  GHashTable *cookies_tab;
+};
 
-typedef struct
+static void
+hangouts_auth_fetch_cookies_cb (PurpleHttpConnection *http_conn,
+				PurpleHttpResponse *response,
+				gpointer user_data)
 {
-	PurpleConnection *gc;
-	gpointer user_data;
-	gchar *client_id;
-	gchar *client_secret;
-	gchar *authorization_code;
-	gchar *redirect_uri;
-} _hangouts_oauth_token_request_data;
+  purple_debug_misc ("hangouts-prpl", "second call back");
 
-typedef struct
-{
-	gchar *APISID;
-	gchar *HSID;
-	gchar *NID;
-	gchar *SAPISID;
-	gchar *SID;
-	gchar *SSID;
-} _hangouts_oauth_cookies;
+  PurpleHttpCookieJar *cj = purple_http_conn_get_cookie_jar (http_conn);
 
-gchar *
-hangouts_auth_get_authorization_header(gchar *access_token)
-{
-	gchar *header = g_strdup_printf("Bearer %s",access_token);
-	return header;
+  GList *headers = purple_http_response_get_headers_by_name (response,
+							     "Set-Cookie");
+  /*TODO: parse headers and store cookies*/
+  GList *l;
+
+  for (l = headers; l != NULL; l = l->next)
+    {
+      purple_debug_misc ("hangouts-prpl", "\nheader: %s", l->data);
+    }
 }
 
 void
-hangouts_auth_with_authentication_code_cb(PurpleHttpConnection *gc,
-	PurpleHttpResponse *response, gpointer user_data){
-	purple_debug_misc("hangouts-prpl", "http req call back");
+hangouts_auth_fetch_login_cookies (HangoutsApi *api)
+{
+  PurpleConnection *gc;
+  PurpleAccount *acct;
+  PurpleHttpRequest *request;
+  HangoutsApiPrivate *priv;
+  gchar *username, *password, *url, *request_body;
 
-	JsonParser *parser;
-	JsonObject *result;
-	gchar *error, *access_token, *refresh_token;
+  priv = api->priv;
+  gc = priv->gc;
+  acct = purple_connection_get_account (gc);
+  username = purple_account_get_username (acct);
+  password = purple_connection_get_password (gc);
 
-	gchar *raw_res = purple_http_response_get_data(response,NULL);
+  url = "https://accounts.google.com/ServiceLoginAuth";
+  request_body = g_strdup_printf (
+      "Email=%s"
+      "&Passwd=%s"
+      "&PersistentCookie=yes"
+      "&GALX=%s"
+      "&continue=https:\/\/talkgadget.google.com\/talkgadget\/gauth?verify=true"
+      "&skipvpage=true",
+      username, password, priv->galx);
+  request = purple_http_request_new (url);
 
-	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 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);
-	hangouts_auth_get_session_cookies(gc,access_token);
-
+  purple_http_request_set_method (request, "POST");
+  purple_http_request_set_max_len (request, -1);
+  purple_http_request_header_add (request, "Content-Type",
+				  "application/x-www-form-urlencoded");
+  purple_http_request_set_contents (request, request_body, -1);
+  purple_http_request_set_cookie_jar (request, priv->cookie_jar);
+  purple_http_request_set_max_redirects (request, 0);
+  purple_http_request (gc, request, hangouts_auth_fetch_cookies_cb, NULL);
 }
 
+static void
+hangouts_auth_get_galx_cookie_cb (PurpleHttpConnection *http_conn,
+				  PurpleHttpResponse *response,
+				  gpointer user_data)

_______________________________________________
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.