[empathy] Implement Google X-OAUTH2 SASL mechanism



commit b98648af1d450203cd1a59ac45155e93f2216b19
Author: Xavier Claessens <xavier claessens collabora co uk>
Date:   Wed Jul 18 13:50:46 2012 +0200

    Implement Google X-OAUTH2 SASL mechanism
    
    https://bugzilla.gnome.org/show_bug.cgi?id=680160

 libempathy/empathy-sasl-mechanisms.c |   38 ++++++++++++++++++++++++++++++++++
 libempathy/empathy-sasl-mechanisms.h |    7 ++++++
 2 files changed, 45 insertions(+), 0 deletions(-)
---
diff --git a/libempathy/empathy-sasl-mechanisms.c b/libempathy/empathy-sasl-mechanisms.c
index 5bdc759..78bb59b 100644
--- a/libempathy/empathy-sasl-mechanisms.c
+++ b/libempathy/empathy-sasl-mechanisms.c
@@ -30,6 +30,7 @@
 
 #define MECH_FACEBOOK "X-FACEBOOK-PLATFORM"
 #define MECH_WLM "X-MESSENGER-OAUTH2"
+#define MECH_GOOGLE "X-OAUTH2"
 
 typedef struct
 {
@@ -40,6 +41,7 @@ typedef struct
 static SupportedMech supported_mechanisms[] = {
   { EMPATHY_SASL_MECHANISM_FACEBOOK, MECH_FACEBOOK },
   { EMPATHY_SASL_MECHANISM_WLM, MECH_WLM },
+  { EMPATHY_SASL_MECHANISM_GOOGLE, MECH_GOOGLE },
 };
 
 static void
@@ -254,6 +256,42 @@ empathy_sasl_auth_wlm_async (TpChannel *channel,
   g_object_unref (result);
 }
 
+void
+empathy_sasl_auth_google_async (TpChannel *channel,
+    const gchar *username,
+    const gchar *access_token,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  GSimpleAsyncResult *result;
+  GArray *credential;
+
+  result = empathy_sasl_auth_common_async (channel, callback, user_data);
+
+  g_return_if_fail (result != NULL);
+  g_return_if_fail (empathy_sasl_channel_supports_mechanism (channel,
+      MECH_GOOGLE));
+  g_return_if_fail (!tp_str_empty (username));
+  g_return_if_fail (!tp_str_empty (access_token));
+
+  DEBUG ("Start %s mechanism", MECH_GOOGLE);
+
+  credential = g_array_sized_new (FALSE, FALSE, sizeof (gchar),
+      strlen (access_token) + strlen (username) + 2);
+
+  g_array_append_val (credential, "\0");
+  g_array_append_vals (credential, username, strlen (username));
+  g_array_append_val (credential, "\0");
+  g_array_append_vals (credential, access_token, strlen (access_token));
+
+  tp_cli_channel_interface_sasl_authentication_call_start_mechanism_with_data (
+      channel, -1, MECH_GOOGLE, credential,
+      generic_cb, g_object_ref (result), g_object_unref, NULL);
+
+  g_array_unref (credential);
+  g_object_unref (result);
+}
+
 gboolean
 empathy_sasl_auth_finish (TpChannel *channel,
     GAsyncResult *result,
diff --git a/libempathy/empathy-sasl-mechanisms.h b/libempathy/empathy-sasl-mechanisms.h
index 84165ac..f0ac123 100644
--- a/libempathy/empathy-sasl-mechanisms.h
+++ b/libempathy/empathy-sasl-mechanisms.h
@@ -30,6 +30,7 @@ typedef enum
   EMPATHY_SASL_MECHANISM_UNSUPPORTED,
   EMPATHY_SASL_MECHANISM_FACEBOOK,
   EMPATHY_SASL_MECHANISM_WLM,
+  EMPATHY_SASL_MECHANISM_GOOGLE,
 } EmpathySaslMechanism;
 
 void empathy_sasl_auth_facebook_async (TpChannel *channel,
@@ -43,6 +44,12 @@ void empathy_sasl_auth_wlm_async (TpChannel *channel,
     GAsyncReadyCallback callback,
     gpointer user_data);
 
+void empathy_sasl_auth_google_async (TpChannel *channel,
+    const gchar *username,
+    const gchar *access_token,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
 gboolean empathy_sasl_auth_finish (TpChannel *channel,
     GAsyncResult *result,
     GError **error);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]