[empathy/gnome-2-34: 53/60] account-settings: migrate passwords from MC to gk ourselves



commit 5ae2a942731d421ffa1b7cd6b3e12ea3edea8d90
Author: Jonny Lamb <jonnylamb gnome org>
Date:   Wed Dec 22 11:49:47 2010 +0000

    account-settings: migrate passwords from MC to gk ourselves
    
    Signed-off-by: Jonny Lamb <jonnylamb gnome org>

 libempathy/empathy-account-settings.c |   47 +++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c
index 37640cc..d6f2c7f 100644
--- a/libempathy/empathy-account-settings.c
+++ b/libempathy/empathy-account-settings.c
@@ -510,6 +510,53 @@ empathy_account_settings_check_readyness (EmpathyAccountSettings *self)
         }
     }
 
+  if (priv->supports_sasl && empathy_account_settings_get (
+          self, "password") != NULL)
+    {
+      /* mission-control still has our password, although the CM
+       * supports SASL. Let's try migrating it. */
+      const GValue *v;
+      const gchar *account_id;
+
+      account_id = tp_proxy_get_object_path (priv->account)
+        + strlen (TP_ACCOUNT_OBJECT_PATH_BASE);
+
+      g_print ("Trying to migrate password parameter from MC to the "
+          "keyring ourselves for account %s", account_id);
+
+      v = empathy_account_settings_get (self, "password");
+
+      /* I can't imagine why this would fail. */
+      if (G_VALUE_HOLDS_STRING (v))
+        {
+          const gchar *password = g_value_get_string (v);
+          const gchar *unset[] = { "password", NULL };
+
+          if (!EMP_STR_EMPTY (password))
+            {
+              GHashTable *empty = tp_asv_new (NULL, NULL);
+
+              empathy_keyring_set_password_async (priv->account, password,
+                  NULL, NULL);
+
+              /* We don't want to request the password again, we
+               * already know it. */
+              priv->password_requested = TRUE;
+
+              priv->password = g_strdup (password);
+              priv->password_original = g_strdup (password);
+
+              /* Now clear the password MC has stored. */
+              tp_account_update_parameters_async (priv->account,
+                  empty, unset, NULL, NULL);
+
+              g_hash_table_remove (priv->parameters, "password");
+
+              g_hash_table_unref (empty);
+            }
+        }
+    }
+
   /* priv->account won't be a proper account if it's the account
    * assistant showing this widget. */
   if (priv->supports_sasl && !priv->password_requested



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