aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-keyring.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy/empathy-keyring.c')
-rw-r--r--libempathy/empathy-keyring.c157
1 files changed, 54 insertions, 103 deletions
diff --git a/libempathy/empathy-keyring.c b/libempathy/empathy-keyring.c
index fef7a4351..1d59b4848 100644
--- a/libempathy/empathy-keyring.c
+++ b/libempathy/empathy-keyring.c
@@ -24,66 +24,60 @@
#include <string.h>
-#include <gnome-keyring.h>
+#include <libsecret/secret.h>
#include "empathy-utils.h"
#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
#include "empathy-debug.h"
-static GnomeKeyringPasswordSchema account_keyring_schema =
- { GNOME_KEYRING_ITEM_GENERIC_SECRET,
- { { "account-id", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
- { "param-name", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
+static const SecretSchema account_keyring_schema =
+ { "org.gnome.Empathy.Account", SECRET_SCHEMA_DONT_MATCH_NAME,
+ { { "account-id", SECRET_SCHEMA_ATTRIBUTE_STRING },
+ { "param-name", SECRET_SCHEMA_ATTRIBUTE_STRING },
{ NULL } } };
-static GnomeKeyringPasswordSchema room_keyring_schema =
- { GNOME_KEYRING_ITEM_GENERIC_SECRET,
- { { "account-id", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
- { "room-id", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
+static const SecretSchema room_keyring_schema =
+ { "org.gnome.Empathy.Room", SECRET_SCHEMA_DONT_MATCH_NAME,
+ { { "account-id", SECRET_SCHEMA_ATTRIBUTE_STRING },
+ { "room-id", SECRET_SCHEMA_ATTRIBUTE_STRING },
{ NULL } } };
gboolean
empathy_keyring_is_available (void)
{
- return gnome_keyring_is_available ();
+ return TRUE;
}
/* get */
static void
-find_items_cb (GnomeKeyringResult result,
- GList *list,
+lookup_item_cb (GObject *source,
+ GAsyncResult *result,
gpointer user_data)
{
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
- GnomeKeyringFound *found;
+ GError *error = NULL;
+ gchar *password;
- if (result != GNOME_KEYRING_RESULT_OK)
+ password = secret_password_lookup_finish (result, &error);
+ if (error != NULL)
{
- GError *error = g_error_new_literal (TP_ERROR,
- TP_ERROR_DOES_NOT_EXIST,
- gnome_keyring_result_to_message (result));
- g_simple_async_result_set_from_error (simple, error);
+ g_simple_async_result_set_error (simple, TP_ERROR,
+ TP_ERROR_DOES_NOT_EXIST, "%s", error->message);
g_clear_error (&error);
goto out;
}
- if (list == NULL)
+ if (password == NULL)
{
g_simple_async_result_set_error (simple, TP_ERROR,
TP_ERROR_DOES_NOT_EXIST, _("Password not found"));
goto out;
}
- /* Get the first password returned. Ideally we should use the latest
- * modified or something but we don't have this information from
- * gnome-keyring atm. */
- found = list->data;
- DEBUG ("Got %d secrets; use the first one", g_list_length (list));
-
- g_simple_async_result_set_op_res_gpointer (simple, g_strdup (found->secret),
- g_free);
+ g_simple_async_result_set_op_res_gpointer (simple, password,
+ (GDestroyNotify) secret_password_free);
out:
g_simple_async_result_complete (simple);
@@ -96,7 +90,6 @@ empathy_keyring_get_account_password_async (TpAccount *account,
gpointer user_data)
{
GSimpleAsyncResult *simple;
- GnomeKeyringAttributeList *match;
const gchar *account_id;
g_return_if_fail (TP_IS_ACCOUNT (account));
@@ -110,15 +103,11 @@ empathy_keyring_get_account_password_async (TpAccount *account,
DEBUG ("Trying to get password for: %s", account_id);
- match = gnome_keyring_attribute_list_new ();
- gnome_keyring_attribute_list_append_string (match, "account-id",
- account_id);
- gnome_keyring_attribute_list_append_string (match, "param-name", "password");
-
- gnome_keyring_find_items (GNOME_KEYRING_ITEM_GENERIC_SECRET,
- match, find_items_cb, simple, NULL);
-
- gnome_keyring_attribute_list_free (match);
+ secret_password_lookup (&account_keyring_schema, NULL,
+ lookup_item_cb, simple,
+ "account-id", account_id,
+ "param-name", "password",
+ NULL);
}
void
@@ -128,7 +117,6 @@ empathy_keyring_get_room_password_async (TpAccount *account,
gpointer user_data)
{
GSimpleAsyncResult *simple;
- GnomeKeyringAttributeList *match;
const gchar *account_id;
g_return_if_fail (TP_IS_ACCOUNT (account));
@@ -144,15 +132,11 @@ empathy_keyring_get_room_password_async (TpAccount *account,
DEBUG ("Trying to get password for room '%s' on account '%s'",
id, account_id);
- match = gnome_keyring_attribute_list_new ();
- gnome_keyring_attribute_list_append_string (match, "account-id",
- account_id);
- gnome_keyring_attribute_list_append_string (match, "room-id", id);
-
- gnome_keyring_find_items (GNOME_KEYRING_ITEM_GENERIC_SECRET,
- match, find_items_cb, simple, NULL);
-
- gnome_keyring_attribute_list_free (match);
+ secret_password_lookup (&room_keyring_schema, NULL,
+ lookup_item_cb, simple,
+ "account-id", account_id,
+ "room-id", id,
+ NULL);
}
const gchar *
@@ -176,18 +160,18 @@ empathy_keyring_get_room_password_finish (TpAccount *account,
/* set */
static void
-store_password_cb (GnomeKeyringResult result,
+store_password_cb (GObject *source,
+ GAsyncResult *result,
gpointer user_data)
{
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+ GError *error = NULL;
- if (result != GNOME_KEYRING_RESULT_OK)
+ if (!secret_password_store_finish (result, &error))
{
- GError *error = g_error_new_literal (TP_ERROR,
- TP_ERROR_DOES_NOT_EXIST,
- gnome_keyring_result_to_message (result));
- g_simple_async_result_set_from_error (simple, error);
- g_clear_error (&error);
+ g_simple_async_result_set_error (simple, TP_ERROR,
+ TP_ERROR_DOES_NOT_EXIST, error->message);
+ g_error_free (error);
}
g_simple_async_result_complete (simple);
@@ -218,8 +202,8 @@ empathy_keyring_set_account_password_async (TpAccount *account,
name = g_strdup_printf (_("IM account password for %s (%s)"),
tp_account_get_display_name (account), account_id);
- gnome_keyring_store_password (&account_keyring_schema, NULL, name, password,
- store_password_cb, simple, NULL,
+ secret_password_store (&account_keyring_schema, NULL, name, password,
+ NULL, store_password_cb, simple,
"account-id", account_id,
"param-name", "password",
NULL);
@@ -253,8 +237,8 @@ empathy_keyring_set_room_password_async (TpAccount *account,
name = g_strdup_printf (_("Password for chatroom '%s' on account %s (%s)"),
id, tp_account_get_display_name (account), account_id);
- gnome_keyring_store_password (&room_keyring_schema, NULL, name, password,
- store_password_cb, simple, NULL,
+ secret_password_store (&room_keyring_schema, NULL, name, password,
+ NULL, store_password_cb, simple,
"account-id", account_id,
"room-id", id,
NULL);
@@ -281,58 +265,30 @@ empathy_keyring_set_room_password_finish (TpAccount *account,
/* delete */
static void
-item_delete_cb (GnomeKeyringResult result,
+items_delete_cb (GObject *source,
+ GAsyncResult *result,
gpointer user_data)
{
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+ GError *error = NULL;
- if (result != GNOME_KEYRING_RESULT_OK)
+ if (!secret_password_clear_finish (result, &error))
{
- GError *error = g_error_new_literal (TP_ERROR,
- TP_ERROR_DOES_NOT_EXIST,
- gnome_keyring_result_to_message (result));
- g_simple_async_result_set_from_error (simple, error);
- g_clear_error (&error);
+ g_simple_async_result_set_error (simple, TP_ERROR,
+ TP_ERROR_DOES_NOT_EXIST, "%s", error->message);
+ g_error_free (error);
}
g_simple_async_result_complete (simple);
g_object_unref (simple);
}
-static void
-find_item_to_delete_cb (GnomeKeyringResult result,
- GList *list,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
- GnomeKeyringFound *found;
-
- if (result != GNOME_KEYRING_RESULT_OK || g_list_length (list) != 1)
- {
- GError *error = g_error_new_literal (TP_ERROR,
- TP_ERROR_DOES_NOT_EXIST,
- gnome_keyring_result_to_message (result));
- g_simple_async_result_set_from_error (simple, error);
- g_clear_error (&error);
-
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
- return;
- }
-
- found = list->data;
-
- gnome_keyring_item_delete (NULL, found->item_id, item_delete_cb,
- simple, NULL);
-}
-
void
empathy_keyring_delete_account_password_async (TpAccount *account,
GAsyncReadyCallback callback,
gpointer user_data)
{
GSimpleAsyncResult *simple;
- GnomeKeyringAttributeList *match;
const gchar *account_id;
g_return_if_fail (TP_IS_ACCOUNT (account));
@@ -343,15 +299,11 @@ empathy_keyring_delete_account_password_async (TpAccount *account,
account_id = tp_proxy_get_object_path (account) +
strlen (TP_ACCOUNT_OBJECT_PATH_BASE);
- match = gnome_keyring_attribute_list_new ();
- gnome_keyring_attribute_list_append_string (match, "account-id",
- account_id);
- gnome_keyring_attribute_list_append_string (match, "param-name", "password");
-
- gnome_keyring_find_items (GNOME_KEYRING_ITEM_GENERIC_SECRET,
- match, find_item_to_delete_cb, simple, NULL);
-
- gnome_keyring_attribute_list_free (match);
+ secret_password_clear (&account_keyring_schema, NULL,
+ items_delete_cb, simple,
+ "account-id", account_id,
+ "param-name", "password",
+ NULL);
}
gboolean
@@ -361,4 +313,3 @@ empathy_keyring_delete_account_password_finish (TpAccount *account,
{
empathy_implement_finish_void (account, empathy_keyring_delete_account_password_async);
}
-