diff options
author | Carlos Garcia Campos <cgarcia@igalia.com> | 2013-03-09 20:57:09 +0800 |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@gnome.org> | 2013-03-12 17:01:34 +0800 |
commit | 2499031072e275e68ad8dc1cb9bd0a53397a5e5a (patch) | |
tree | b94479df9e1470d6855a7bbb4e5b2e0b37fcfa19 /lib/ephy-profile-utils.c | |
parent | 78b70aa84bb94f5097d40ffbb461aefcbbaeb979 (diff) | |
download | gsoc2013-epiphany-2499031072e275e68ad8dc1cb9bd0a53397a5e5a.tar gsoc2013-epiphany-2499031072e275e68ad8dc1cb9bd0a53397a5e5a.tar.gz gsoc2013-epiphany-2499031072e275e68ad8dc1cb9bd0a53397a5e5a.tar.bz2 gsoc2013-epiphany-2499031072e275e68ad8dc1cb9bd0a53397a5e5a.tar.lz gsoc2013-epiphany-2499031072e275e68ad8dc1cb9bd0a53397a5e5a.tar.xz gsoc2013-epiphany-2499031072e275e68ad8dc1cb9bd0a53397a5e5a.tar.zst gsoc2013-epiphany-2499031072e275e68ad8dc1cb9bd0a53397a5e5a.zip |
lib: Move auth data query/store methods from ephy-profile-utils to a new file
Move to ephy-form-auth-data and renamed accordingly.
Diffstat (limited to 'lib/ephy-profile-utils.c')
-rw-r--r-- | lib/ephy-profile-utils.c | 232 |
1 files changed, 0 insertions, 232 deletions
diff --git a/lib/ephy-profile-utils.c b/lib/ephy-profile-utils.c index 5a8f1a33b..5d295e5f3 100644 --- a/lib/ephy-profile-utils.c +++ b/lib/ephy-profile-utils.c @@ -25,27 +25,8 @@ #include "ephy-debug.h" #include "ephy-file-helpers.h" -#include <glib/gi18n.h> -#include <libsoup/soup.h> - #define PROFILE_MIGRATION_FILE ".migrated" -const SecretSchema* -ephy_profile_get_form_password_schema (void) -{ - static const SecretSchema schema = { - "org.epiphany.FormPassword", SECRET_SCHEMA_NONE, - { - { URI_KEY, SECRET_SCHEMA_ATTRIBUTE_STRING }, - { FORM_USERNAME_KEY, SECRET_SCHEMA_ATTRIBUTE_STRING }, - { FORM_PASSWORD_KEY, SECRET_SCHEMA_ATTRIBUTE_STRING }, - { USERNAME_KEY, SECRET_SCHEMA_ATTRIBUTE_STRING }, - { "NULL", 0 }, - } - }; - return &schema; -} - int ephy_profile_utils_get_migration_version () { @@ -105,219 +86,6 @@ ephy_profile_utils_set_migration_version (int version) return result; } -static void -normalize_and_prepare_uri (SoupURI *uri) -{ - g_return_if_fail (uri != NULL); - - /* We normalize https? schemes here so that we use passwords - * we stored in https sites in their http counterparts, and - * vice-versa. */ - if (uri->scheme == SOUP_URI_SCHEME_HTTPS) - soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP); - - soup_uri_set_path (uri, "/"); -} - -static GHashTable * -ephy_profile_utils_get_attributes_table (const char *uri, - const char *field_username, - const char *field_password, - const char *username) -{ - return secret_attributes_build (EPHY_FORM_PASSWORD_SCHEMA, - URI_KEY, uri, - FORM_USERNAME_KEY, field_username, - FORM_PASSWORD_KEY, field_password, - username ? USERNAME_KEY : NULL, username, - NULL); -} - -static void -store_form_password_cb (SecretService *service, - GAsyncResult *res, - GSimpleAsyncResult *async) -{ - GError *error = NULL; - - secret_service_store_finish (service, res, &error); - if (error != NULL) - g_simple_async_result_take_error (async, error); - - g_simple_async_result_complete (async); - g_object_unref (async); -} - -void -_ephy_profile_utils_store_form_auth_data (const char *uri, - const char *form_username, - const char *form_password, - const char *username, - const char *password, - GAsyncReadyCallback callback, - gpointer userdata) -{ - SoupURI *fake_uri; - char *fake_uri_str; - SecretValue *value; - GHashTable *attributes; - char *label; - GSimpleAsyncResult *res; - - g_return_if_fail (uri); - g_return_if_fail (form_username); - g_return_if_fail (form_password); - g_return_if_fail (username); - g_return_if_fail (password); - - fake_uri = soup_uri_new (uri); - - if (fake_uri == NULL) - return; - - res = g_simple_async_result_new (NULL, callback, userdata, - _ephy_profile_utils_store_form_auth_data); - - normalize_and_prepare_uri (fake_uri); - fake_uri_str = soup_uri_to_string (fake_uri, FALSE); - value = secret_value_new (password, -1, "text/plain"); - attributes = ephy_profile_utils_get_attributes_table (fake_uri_str, form_username, - form_password, username); - /* Translators: The first %s is the username and the second one is the - * hostname where this is happening. Example: gnome@gmail.com and - * mail.google.com. - */ - label = g_strdup_printf (_("Password for %s in a form in %s"), - username, fake_uri_str); - secret_service_store (NULL, EPHY_FORM_PASSWORD_SCHEMA, - attributes, NULL, label, value, - NULL, - (GAsyncReadyCallback)store_form_password_cb, - g_object_ref (res)); - - g_free (label); - secret_value_unref (value); - g_hash_table_unref (attributes); - soup_uri_free (fake_uri); - g_free (fake_uri_str); - g_object_unref (res); -} - - -gboolean -_ephy_profile_utils_store_form_auth_data_finish (GAsyncResult *result, - GError **error) -{ - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, _ephy_profile_utils_store_form_auth_data), FALSE); - - return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error); -} - -typedef struct -{ - EphyQueryFormDataCallback callback; - gpointer data; - GDestroyNotify destroy_data; -} EphyProfileQueryClosure; - -static void -ephy_profile_query_closure_free (EphyProfileQueryClosure *closure) -{ - if (closure->destroy_data) - closure->destroy_data (closure->data); - - g_slice_free (EphyProfileQueryClosure, closure); -} - -static void -search_form_data_cb (SecretService *service, - GAsyncResult *res, - EphyProfileQueryClosure *closure) -{ - GList *results; - SecretItem *item; - const char* username = NULL, *password = NULL; - SecretValue *value = NULL; - GHashTable *attributes = NULL; - GError *error = NULL; - - results = secret_service_search_finish (service, res, &error); - if (error) { - g_warning ("Couldn't retrieve form data: %s", error->message); - g_error_free (error); - goto out; - } - - if (!results) - goto out; - - item = (SecretItem*)results->data; - attributes = secret_item_get_attributes (item); - username = g_hash_table_lookup (attributes, USERNAME_KEY); - value = secret_item_get_secret (item); - password = secret_value_get (value, NULL); - - g_list_free_full (results, (GDestroyNotify)g_object_unref); - -out: - if (closure->callback) - closure->callback (username, password, closure->data); - - if (value) - secret_value_unref (value); - if (attributes) - g_hash_table_unref (attributes); - - ephy_profile_query_closure_free (closure); -} - -void -_ephy_profile_utils_query_form_auth_data (const char *uri, - const char *form_username, - const char *form_password, - EphyQueryFormDataCallback callback, - gpointer data, - GDestroyNotify destroy_data) -{ - SoupURI *key; - char *key_str; - EphyProfileQueryClosure *closure; - GHashTable *attributes; - - g_return_if_fail (uri); - g_return_if_fail (form_username); - g_return_if_fail (form_password); - - key = soup_uri_new (uri); - g_return_if_fail (key); - - normalize_and_prepare_uri (key); - - key_str = soup_uri_to_string (key, FALSE); - - attributes = ephy_profile_utils_get_attributes_table (key_str, form_username, - form_password, NULL); - - closure = g_slice_new0 (EphyProfileQueryClosure); - closure->callback = callback; - closure->data = data; - closure->destroy_data = destroy_data; - - LOG ("Querying Keyring: %s", key_str); - - secret_service_search (NULL, - EPHY_FORM_PASSWORD_SCHEMA, - attributes, - SECRET_SEARCH_UNLOCK | SECRET_SEARCH_LOAD_SECRETS, - NULL, (GAsyncReadyCallback)search_form_data_cb, - closure); - - g_hash_table_unref (attributes); - soup_uri_free (key); - g_free (key_str); -} - #define EPHY_PROFILE_MIGRATOR "ephy-profile-migrator" gboolean |