/soc/2015/nakulgulati/main: c5f0414ecc8f: hangouts: api-dropped ...

[email protected]
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: c5f0414ecc8ff9a80acb30141419de88abaa74bc
Author:	 Nakul Gulati
Date:	 2015-08-21 06:31 +0530
Branch:	 hangouts
URL: https://hg.pidgin.im/soc/2015/nakulgulati/main/rev/c5f0414ecc8f

Description:

hangouts: api-dropped cookie login flow in favor of OAuth

diffstat:

 libpurple/protocols/hangouts/api.c |  167 +-----------------------------------
 libpurple/protocols/hangouts/api.h |   16 ---
 2 files changed, 6 insertions(+), 177 deletions(-)

diffs (263 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
@@ -48,18 +48,6 @@ enum HangoutsChatInitPathIndex
   HANGOUTS_CHAT_INIT_SYNC_TIMESTAMP = 5
 };
 
-struct _HangoutsApiCookies
-{
-  gchar *APISID;
-  gchar *GALX;
-  gchar *HSID;
-  gchar *NID;
-  gchar *SAPISID;
-  gchar *SID;
-  gchar *SSID;
-
-};
-
 struct _HangoutsApiPrivate
 {
   PurpleConnection *gc;
@@ -67,8 +55,6 @@ struct _HangoutsApiPrivate
 
   HangoutsChannel *channel;
 
-  HangoutsApiCookies *cookies;
-
   JsonNode *chat_init_dict;
 
   gchar *api_key;
@@ -115,7 +101,6 @@ hangouts_api_dispose (GObject *obj)
 
   json_node_free (priv->chat_init_dict);
 
-  g_free (priv->cookies);
   g_free (priv->access_token);
   g_free (priv->api_key);
   g_free (priv->client_id);
@@ -143,12 +128,12 @@ hangouts_api_class_init (HangoutsApiClas
       		NULL);
   
   g_signal_new ("get-chat-init",
-		  G_TYPE_FROM_CLASS(klass),
-		  G_SIGNAL_ACTION, 0,
-		  NULL, NULL,
-		  g_cclosure_marshal_VOID__VOID,
-		  G_TYPE_NONE,
-		  NULL);
+		G_TYPE_FROM_CLASS(klass),
+		G_SIGNAL_ACTION, 0,
+		NULL, NULL,
+		g_cclosure_marshal_VOID__VOID,
+		G_TYPE_NONE,
+		NULL);
 }
 
 static void
@@ -185,7 +170,6 @@ hangouts_api_new (PurpleConnection *gc)
   api = g_object_new (HANGOUTS_TYPE_API, NULL);
   priv = api->priv;
   priv->channel = hangouts_channel_new (gc);
-  priv->cookies = g_new0(HangoutsApiCookies, 1);
   priv->gc = gc;
 
   g_signal_connect(priv->channel, "connect",
@@ -215,144 +199,6 @@ hangouts_api_get_connection (HangoutsApi
   return gc;
 }
 
-void
-hangouts_api_parse_header (HangoutsApiCookies *cookies, GList *headers)
-{
-  GList *l;
-
-  for (l = headers; l != NULL; l = l->next)
-    {
-      const gchar *cookie = l->data;
-      const gchar *eqsign, *semicolon;
-      gchar *name, *value;
-
-      eqsign = strchr (cookie, '=');
-      semicolon = strchr (cookie, ';');
-
-      name = g_strndup (cookie, eqsign - cookie);
-      eqsign++;
-      if (semicolon != NULL)
-	value = g_strndup (eqsign, semicolon - eqsign);
-      else
-	value = g_strdup (eqsign);
-
-      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);
-
-    }
-}
-
-static void
-hangouts_api_fetch_cookies_cb (PurpleHttpConnection *http_conn,
-			       PurpleHttpResponse *response, gpointer user_data)
-{
-  HangoutsApi *api;
-  HangoutsApiPrivate *priv;
-
-  api = user_data;
-  priv = api->priv;
-
-  PurpleHttpCookieJar *cj = purple_http_conn_get_cookie_jar (http_conn);
-
-  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
-hangouts_api_fetch_login_cookies (HangoutsApi *api)
-{
-  PurpleConnection *gc;
-  PurpleAccount *acct;
-  PurpleHttpRequest *request;
-  HangoutsApiPrivate *priv;
-  gchar *username, *password, *request_body;
-
-  priv = api->priv;
-  gc = priv->gc;
-  acct = purple_connection_get_account (gc);
-  username = purple_account_get_username (acct);
-  password = purple_connection_get_password (gc);
-
-  request_body = g_strdup_printf ("&PersistentCookie=yes"
-				  "&Email=%s"
-				  "&Passwd=%s"
-				  "&GALX=%s",
-				  username, password, priv->cookies->GALX);
-  request = purple_http_request_new (HANGOUTS_API_LOGIN_URL);
-
-  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_api_fetch_cookies_cb, api);
-}
-
-static void
-hangouts_api_get_galx_cookie_cb (PurpleHttpConnection *http_conn,
-				 PurpleHttpResponse *response,
-				 gpointer user_data)
-{
-  HangoutsApi *api = user_data;
-  HangoutsApiPrivate *priv = api->priv;
-
-  priv->cookie_jar = purple_http_conn_get_cookie_jar (http_conn);
-  priv->cookies->GALX = purple_http_cookie_jar_get (priv->cookie_jar, "GALX");
-
-  if (!g_str_equal (priv->cookies->GALX, ""))
-    {
-      hangouts_api_fetch_login_cookies (api);
-    }
-}
-
-void
-hangouts_api_get_galx_cookie (HangoutsApi *api)
-{
-  PurpleHttpRequest *request;
-  PurpleHttpCookieJar *cookieJar;
-  HangoutsApiPrivate *priv;
-  PurpleConnection *gc;
-
-  priv = api->priv;
-  gc = priv->gc;
-
-  request = purple_http_request_new (HANGOUTS_API_GALX_COOKIE_URL);
-  cookieJar = purple_http_cookie_jar_new ();
-
-  purple_http_request_set_method (request, "GET");
-  purple_http_request_set_cookie_jar (request, cookieJar);
-  purple_http_request (gc, request, hangouts_api_get_galx_cookie_cb, api);
-}
-
 static void
 hangouts_api_auth_with_code_cb (PurpleHttpConnection *http_conn,
 				PurpleHttpResponse *response,
@@ -784,4 +630,3 @@ hangouts_api_setactiveclient (HangoutsAp
 
   hangouts_api_request (api, &info, 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
@@ -45,9 +45,6 @@ response_type=code\
 #define HANGOUTS_API_OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE "authorization_code"
 #define HANGOUTS_API_OAUTH2_GRANT_TYPE_REFRESH_CODE "refresh_token"
 
-#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_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"
@@ -74,7 +71,6 @@ typedef struct _HangoutsApi HangoutsApi;
 typedef struct _HangoutsApiClass HangoutsApiClass;
 typedef struct _HangoutsApiPrivate HangoutsApiPrivate;
 typedef struct _HangoutsApiHttpInfo HangoutsApiHttpInfo;
-typedef struct _HangoutsApiCookies HangoutsApiCookies;
 
 struct _HangoutsApi
 {
@@ -99,15 +95,6 @@ hangouts_api_set_refresh_token (Hangouts
 PurpleConnection *
 hangouts_api_get_connection(HangoutsApi *api);
 
-HangoutsApi *
-hangouts_api_new_from_oauth (PurpleConnection *gc, gchar *access_token);
-
-void
-hangouts_api_parse_header (HangoutsApiCookies *cookies, GList *headers);
-
-void
-hangouts_api_get_galx_cookie (HangoutsApi *api);
-
 void
 hangouts_api_auth_with_code (HangoutsApi *api, gchar *auth_code);
 
@@ -115,9 +102,6 @@ void
 hangouts_api_oauth_refresh_token (HangoutsApi *api);
 
 void
-hangouts_api_fetch_login_cookies (HangoutsApi *api);
-
-void
 hangouts_api_get_private_token (HangoutsApi *api);
 
 void

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