/soc/2015/nakulgulati/main: 6e224ae224ff: hangouts: api get pvt ...

[email protected]
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 6e224ae224ffa7adbd759a6b6690109633ba4a03
Author:	 Nakul Gulati
Date:	 2015-08-02 03:57 +0800
Branch:	 hangouts
URL: https://hg.pidgin.im/soc/2015/nakulgulati/main/rev/6e224ae224ff

Description:

hangouts: api get pvt token

diffstat:

 libpurple/protocols/hangouts/api.c |  132 +++++++++++++++++++++++++-----------
 libpurple/protocols/hangouts/api.h |   22 +++--
 2 files changed, 105 insertions(+), 49 deletions(-)

diffs (256 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,14 +34,16 @@ enum _HangoutsConversationOffTheRecordSt
   HANGOUTS_OFF_THE_RECORD = 1, HANGOUTS_ON_THE_RECORD = 2
 };
 
-struct _HangoutsApiCookies{
+struct _HangoutsApiCookies
+{
   gchar *APISID;
+  gchar *GALX;
   gchar *HSID;
   gchar *NID;
   gchar *SAPISID;
   gchar *SID;
   gchar *SSID;
-  gchar *test;
+
 };
 
 struct _HangoutsApiPrivate
@@ -50,7 +52,6 @@ struct _HangoutsApiPrivate
   PurpleHttpCookieJar *cookie_jar;
   HangoutsApiCookies *cookies;
 
-  gchar *galx;
   gchar *api_key;
   gchar *access_token;
   gchar *header_date;
@@ -76,10 +77,9 @@ hangouts_api_dispose (GObject *obj)
       purple_http_conn_cancel_all (priv->gc);
     }
 
-  purple_http_cookie_jar_unref(priv->cookie_jar);
+  purple_http_cookie_jar_unref (priv->cookie_jar);
 
-  g_free(priv->cookies);
-  g_free (priv->galx);
+  g_free (priv->cookies);
   g_free (priv->access_token);
   g_free (priv->api_key);
   g_free (priv->client_id);
@@ -113,12 +113,10 @@ hangouts_api_new (PurpleConnection *gc)
 {
   HangoutsApi *api;
   HangoutsApiPrivate *priv;
-  HangoutsApiCookies *cookies;
 
   api = g_object_new (HANGOUTS_TYPE_API, NULL);
   priv = api->priv;
-  cookies = malloc(sizeof(HangoutsApiCookies));
-  priv->cookies = cookies;
+  priv->cookies = g_new0(HangoutsApiCookies, 1);
 
   priv->gc = gc;
 
@@ -130,7 +128,7 @@ hangouts_api_parse_header (HangoutsApiCo
 {
   GList *l;
 
-  for(l = headers; l!=NULL; l=l->next)
+  for (l = headers; l != NULL; l = l->next)
     {
       const gchar *cookie = l->data;
       const gchar *eqsign, *semicolon;
@@ -146,26 +144,32 @@ hangouts_api_parse_header (HangoutsApiCo
       else
 	value = g_strdup (eqsign);
 
-      if(g_str_equal(name, "APISID")){
-	  cookies->APISID = value;
-      }
-      else if(g_str_equal(name, "HSID")){
-	  cookies->HSID = value;
-      }
-      else if(g_str_equal(name, "NID")){
-	  cookies->NID = value;
-      }
-      else if(g_str_equal(name, "SAPISID")){
-	  cookies->SAPISID = value;
-      }
-      else if(g_str_equal(name, "SID")){
-	  cookies->SID = value;
-      }
-      else if(g_str_equal(name, "SSID")){
-	  cookies->SSID = value;
-      }
-      g_free(name);
-      g_free(value);
+      if (g_str_equal (name, "APISID"))
+	{
+	  cookies->APISID = g_strdup (value);
+	}
+      else if (g_str_equal (name, "HSID"))
+	{
+	  cookies->HSID = g_strdup (value);
+	}
+      else if (g_str_equal (name, "NID"))
+	{
+	  cookies->NID = g_strdup (value);
+	}
+      else if (g_str_equal (name, "SAPISID"))
+	{
+	  cookies->SAPISID = g_strdup (value);
+	}
+      else if (g_str_equal (name, "SID"))
+	{
+	  cookies->SID = g_strdup (value);
+	}
+      else if (g_str_equal (name, "SSID"))
+	{
+	  cookies->SSID = g_strdup (value);
+	}
+      g_free (name);
+      g_free (value);
 
     }
 }
@@ -185,6 +189,8 @@ hangouts_api_fetch_cookies_cb (PurpleHtt
   GList *headers = purple_http_response_get_headers_by_name (response,
 							     "Set-Cookie");
   hangouts_api_parse_header (priv->cookies, headers);
+
+  hangouts_api_get_private_token (api);
 }
 
 void
@@ -203,13 +209,11 @@ hangouts_api_fetch_login_cookies (Hangou
   password = purple_connection_get_password (gc);
 
   url = "https://accounts.google.com/ServiceLoginAuth";
-  request_body = g_strdup_printf (
-      "Email=%s"
-      "&Passwd=%s"
-      "&PersistentCookie=yes"
-      "&GALX=%s"
-      "&Page=PasswordSeparationSignIn",
-      username, password, priv->galx);
+  request_body = g_strdup_printf ("&PersistentCookie=yes"
+				  "&Email=%s"
+				  "&Passwd=%s"
+				  "&GALX=%s",
+				  username, password, priv->cookies->GALX);
   request = purple_http_request_new (url);
 
   purple_http_request_set_method (request, "POST");
@@ -231,11 +235,12 @@ hangouts_api_get_galx_cookie_cb (PurpleH
   HangoutsApiPrivate *priv = api->priv;
 
   priv->cookie_jar = purple_http_conn_get_cookie_jar (http_conn);
-  priv->galx = purple_http_cookie_jar_get (priv->cookie_jar, "GALX");
+  priv->cookies->GALX = purple_http_cookie_jar_get (priv->cookie_jar, "GALX");
 
-  purple_debug_misc ("hangouts-prpl", "galx: %s", priv->galx);
-
-  hangouts_api_fetch_login_cookies (api);
+  if (!g_str_equal (priv->cookies->GALX, ""))
+    {
+      hangouts_api_fetch_login_cookies (api);
+    }
 }
 
 void
@@ -258,6 +263,51 @@ hangouts_api_get_galx_cookie (HangoutsAp
   purple_http_request (gc, request, hangouts_api_get_galx_cookie_cb, api);
 }
 
+static void
+hangouts_api_get_private_token_cb (PurpleHttpConnection *http_conn,
+				   PurpleHttpResponse *response,
+				   gpointer user_data)
+{
+  gchar *raw_res;
+
+  raw_res = purple_http_response_get_data (response, NULL);
+
+  purple_debug_misc ("hangouts_prpl", "res: %s", raw_res);
+  //TODO parse pvt token
+}
+
+void
+hangouts_api_get_private_token (HangoutsApi *api)
+{
+  HangoutsApiPrivate *priv;
+  HangoutsApiCookies *cookies;
+  PurpleConnection *gc;
+  PurpleHttpRequest *request;
+
+  priv = api->priv;
+  gc = priv->gc;
+  cookies = priv->cookies;
+  request = purple_http_request_new (HANGOUTS_API_PVT_TOKEN_URL);
+
+  purple_http_request_set_method (request, "GET");
+  purple_http_request_set_max_len (request, -1);
+  purple_http_request_header_add (
+      request, "Cookie", g_strdup_printf ("APISID %s", cookies->APISID));
+  purple_http_request_header_add (request, "Cookie",
+				  g_strdup_printf ("HSID %s", cookies->HSID));
+  purple_http_request_header_add (request, "Cookie",
+				  g_strdup_printf ("NID %s", cookies->NID));
+  purple_http_request_header_add (
+      request, "Cookie", g_strdup_printf ("SAPISID %s", cookies->SAPISID));
+  purple_http_request_header_add (request, "Cookie",
+				  g_strdup_printf ("SID %s", cookies->SID));
+  purple_http_request_header_add (request, "Cookie",
+				  g_strdup_printf ("SSID %s", cookies->SSID));
+
+  purple_http_request (gc, request, hangouts_api_get_private_token_cb, api);
+
+}
+
 gchar *
 hangouts_api_get_request_header (HangoutsApi *api)
 {
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
@@ -24,15 +24,18 @@
 
 #include "connection.h"
 
-#define HANGOUTS_ORIGIN_URL "https://talkgadget.google.com"
-#define HANGOUTS_IMAGE_UPLOAD_URL "http://docs.google.com/upload/photos/resumable"
-#define HANGOUTS_PVT_TOKEN_URL "https://talkgadget.google.com/talkgadget/_/extension-start"
-#define HANGOUTS_CHAT_INIT_URL "https://talkgadget.google.com/u/0/talkgadget/_/chat"
-#define HANGOUTS_API_BASE_URL "https://www.googleapis.com/chat/v1ios/"
+#define HANGOUTS_API_GALX_COOKIE_URL "https://accounts.google.com/ServiceLogin?service=ah&passive=true"
+#define HANGOUTS_API_LOGIN_URL "https://accounts.google.com/ServiceLoginAuth"
 
-#define HANGOUTS_PROP "aChromeExtension"
-#define HANGOUTS_FID "gtn-roster-iframe-id"
-#define HANGOUTS_EC "[\"ci:ec\",true,true,false]"
+#define HANGOUTS_API_ORIGIN_URL "https://talkgadget.google.com"
+#define HANGOUTS_API_IMAGE_UPLOAD_URL "http://docs.google.com/upload/photos/resumable"
+#define HANGOUTS_API_PVT_TOKEN_URL "https://talkgadget.google.com/talkgadget/_/extension-start"
+#define HANGOUTS_API_CHAT_INIT_URL "https://talkgadget.google.com/u/0/talkgadget/_/chat"
+#define HANGOUTS_API_BASE_URL "https://clients6.google.com/chat/v1/"
+
+#define HANGOUTS_API_PROP "aChromeExtension"
+#define HANGOUTS_API_FID "gtn-roster-iframe-id"
+#define HANGOUTS_API_EC "[\"ci:ec\",true,true,false]"
 
 #define HANGOUTS_CHAT_INIT_PARAMS(pvt) g_strdup_printf("prop=%s&fid=%s&ec=%s&pvt=%s",HANGOUTS_PROP,HANGOUTS_FID,HANGOUTS_EC,pvt)
 
@@ -78,6 +81,9 @@ hangouts_api_get_galx_cookie (HangoutsAp
 void
 hangouts_api_fetch_login_cookies (HangoutsApi *api);
 
+void
+hangouts_api_get_private_token(HangoutsApi *api);
+
 gchar *
 hangouts_api_get_request_header (HangoutsApi *api);
 

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