aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorGustavo Noronha Silva <gns@gnome.org>2009-12-15 23:17:54 +0800
committerGustavo Noronha Silva <gns@gnome.org>2009-12-15 23:24:26 +0800
commit9d419181e0630431de079b777f1e537452fc69e4 (patch)
tree37b8dc477222282e151275a3829e864818dbb598 /lib
parentefb097c929407bb264b90d31feadac34c31a85e7 (diff)
downloadgsoc2013-epiphany-9d419181e0630431de079b777f1e537452fc69e4.tar.gz
gsoc2013-epiphany-9d419181e0630431de079b777f1e537452fc69e4.tar.zst
gsoc2013-epiphany-9d419181e0630431de079b777f1e537452fc69e4.zip
Add a new utility function to query the keyring for the form password
This is used to make all policy regarding what and how we save data be in one place.
Diffstat (limited to 'lib')
-rw-r--r--lib/ephy-profile-migration.c119
-rw-r--r--lib/ephy-profile-migration.h11
2 files changed, 97 insertions, 33 deletions
diff --git a/lib/ephy-profile-migration.c b/lib/ephy-profile-migration.c
index ee57aed89..b5a32f17f 100644
--- a/lib/ephy-profile-migration.c
+++ b/lib/ephy-profile-migration.c
@@ -33,6 +33,7 @@
#include "ephy-profile-migration.h"
+#include "ephy-debug.h"
#include "ephy-file-helpers.h"
#ifdef ENABLE_NSS
#include "ephy-nss-glue.h"
@@ -425,6 +426,27 @@ store_form_password_cb (GnomeKeyringResult result,
/* FIXME: should we do anything if the operation failed? */
}
+static void
+normalize_and_prepare_uri (SoupURI *uri,
+ const char *form_username,
+ const char *form_password)
+{
+ /* We normalize https? schemes here so that we use passwords
+ * we stored in https sites in their http counterparts, and
+ * vice-versa. */
+ if (g_str_equal (uri->scheme, SOUP_URI_SCHEME_HTTPS))
+ soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP);
+
+ /* Store the form login and password names encoded in the
+ * URL. A bit of an abuse of keyring, but oh well */
+ soup_uri_set_query_from_fields (uri,
+ FORM_USERNAME_KEY,
+ form_username,
+ FORM_PASSWORD_KEY,
+ form_password,
+ NULL);
+}
+
void
_ephy_profile_store_form_auth_data (const char *uri,
const char *form_username,
@@ -432,39 +454,70 @@ _ephy_profile_store_form_auth_data (const char *uri,
const char *username,
const char *password)
{
- SoupURI *fake_uri;
- char *fake_uri_str;
-
- 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);
- /* Store the form login and password names encoded in the
- * URL. A bit of an abuse of keyring, but oh well */
- soup_uri_set_query_from_fields (fake_uri,
- FORM_USERNAME_KEY,
- form_username,
- FORM_PASSWORD_KEY,
- form_password,
- NULL);
- fake_uri_str = soup_uri_to_string (fake_uri, FALSE);
- gnome_keyring_set_network_password (NULL,
- username,
- NULL,
- fake_uri_str,
- NULL,
- fake_uri->scheme,
- NULL,
- fake_uri->port,
- password,
- (GnomeKeyringOperationGetIntCallback)store_form_password_cb,
- NULL,
- NULL);
- soup_uri_free (fake_uri);
- g_free (fake_uri_str);
+ SoupURI *fake_uri;
+ char *fake_uri_str;
+
+ 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);
+ normalize_and_prepare_uri (fake_uri, form_username, form_password);
+ fake_uri_str = soup_uri_to_string (fake_uri, FALSE);
+
+ gnome_keyring_set_network_password (NULL,
+ username,
+ NULL,
+ fake_uri_str,
+ NULL,
+ fake_uri->scheme,
+ NULL,
+ fake_uri->port,
+ password,
+ (GnomeKeyringOperationGetIntCallback)store_form_password_cb,
+ NULL,
+ NULL);
+ soup_uri_free (fake_uri);
+ g_free (fake_uri_str);
+}
+
+GList*
+_ephy_profile_query_form_auth_data (const char *uri,
+ const char *form_username,
+ const char *form_password,
+ GnomeKeyringOperationGetListCallback callback,
+ gpointer data,
+ GDestroyNotify destroy_data)
+{
+ SoupURI *key;
+ char *key_str;
+ GList *results = NULL;
+
+ g_return_val_if_fail (uri, NULL);
+ g_return_val_if_fail (form_username, NULL);
+ g_return_val_if_fail (form_password, NULL);
+
+ key = soup_uri_new (uri);
+ normalize_and_prepare_uri (key, form_username, form_password);
+ key_str = soup_uri_to_string (key, FALSE);
+
+ LOG ("Querying Keyring: %s", key_str);
+ gnome_keyring_find_network_password (NULL,
+ NULL,
+ key_str,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ callback,
+ data,
+ destroy_data);
+ soup_uri_free (key);
+ g_free (key_str);
+
+ return results;
}
#define PROFILE_MIGRATION_FILE ".migrated"
diff --git a/lib/ephy-profile-migration.h b/lib/ephy-profile-migration.h
index 7fe4945c7..33d14bf81 100644
--- a/lib/ephy-profile-migration.h
+++ b/lib/ephy-profile-migration.h
@@ -20,6 +20,9 @@
#ifndef EPHY_PROFILE_MIGRATION_H
#define EPHY_PROFILE_MIGRATION_H
+#include <glib.h>
+#include <gnome-keyring.h>
+
#define FORM_USERNAME_KEY "form_username"
#define FORM_PASSWORD_KEY "form_password"
@@ -31,4 +34,12 @@ void _ephy_profile_store_form_auth_data (const char *uri,
const char *username,
const char *password);
+GList*
+_ephy_profile_query_form_auth_data (const char *uri,
+ const char *form_username,
+ const char *form_password,
+ GnomeKeyringOperationGetListCallback callback,
+ gpointer data,
+ GDestroyNotify destroy_data);
+
#endif