Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-keyring.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2008-12-01 11:16:43 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2008-12-01 11:16:43 (GMT)
commitdc3a49f93a0798b5c0c8d2fd6283f39294945045 (patch)
tree68c16d20d561b645fde10246bd166f85f6a864f4 /shell/ev-keyring.c
parentfeeec13cf60423b15059f5e30cf3fb5763cd3922 (diff)
Removed
2008-12-01 Carlos Garcia Campos <carlosgc@gnome.org> * configure.ac: * shell/Makefile.am: * shell/ev-keyring.[ch]: * shell/ev-password.[ch]: Removed * shell/ev-password-view.[ch]: (ev_password_view_finalize), (ev_password_view_class_init), (ev_password_view_clicked_cb), (ev_password_view_init), (ev_password_view_set_uri), (ev_password_dialog_got_response), (ev_password_dialog_remember_button_toggled), (ev_password_dialog_entry_changed_cb), (ev_password_dialog_entry_activated_cb), (ev_password_view_ask_password), (ev_password_view_get_password), (ev_password_view_get_password_save_flags), (ev_password_view_new): * shell/ev-window.c: (ev_window_password_view_unlock), (ev_window_load_job_cb), (ev_window_close_dialogs), (ev_window_init): Rework the password view. When the password is in the keyring it's used automatically without showing the password dialog and it's only stored in the keyring when we are sure it's correct. The password dialog has been reworked too, in order to make it more hig compliant and consistent with the GTK+ dialog used in gtkmountoperation. Fixes bug #562496. svn path=/trunk/; revision=3281
Diffstat (limited to 'shell/ev-keyring.c')
-rw-r--r--shell/ev-keyring.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/shell/ev-keyring.c b/shell/ev-keyring.c
new file mode 100644
index 0000000..0199863
--- /dev/null
+++ b/shell/ev-keyring.c
@@ -0,0 +1,116 @@
+/* ev-keyring.c
+ * this file is part of evince, a gnome document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org>
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "ev-keyring.h"
+
+#ifdef WITH_KEYRING
+#include <gnome-keyring.h>
+
+static const GnomeKeyringPasswordSchema doc_password_schema = {
+ GNOME_KEYRING_ITEM_GENERIC_SECRET,
+ {
+ { "type", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
+ { "uri", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
+ { NULL, 0 }
+ }
+};
+const GnomeKeyringPasswordSchema *EV_DOCUMENT_PASSWORD_SCHEMA = &doc_password_schema;
+#endif /* WITH_KEYRING */
+
+gboolean
+ev_keyring_is_available (void)
+{
+#ifdef WITH_KEYRING
+ return gnome_keyring_is_available ();
+#else
+ return FALSE;
+#endif
+}
+
+gchar *
+ev_keyring_lookup_password (const gchar *uri)
+{
+ gchar *retval = NULL;
+#ifdef WITH_KEYRING
+ GnomeKeyringResult result;
+ gchar *password = NULL;
+
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ if (!gnome_keyring_is_available ())
+ return NULL;
+
+ result = gnome_keyring_find_password_sync (EV_DOCUMENT_PASSWORD_SCHEMA,
+ &password,
+ "type", "document_password",
+ "uri", uri,
+ NULL);
+ if (result != GNOME_KEYRING_RESULT_OK || !password) {
+ if (password)
+ gnome_keyring_free_password (password);
+ return NULL;
+ }
+
+ retval = g_strdup (password);
+ gnome_keyring_free_password (password);
+#endif /* WITH_KEYRING */
+ return retval;
+}
+
+gboolean
+ev_keyring_save_password (const gchar *uri,
+ const gchar *password,
+ GPasswordSave flags)
+{
+#ifdef WITH_KEYRING
+ GnomeKeyringResult result;
+ const gchar *keyring;
+ gchar *name;
+ gchar *unescaped_uri;
+
+ g_return_val_if_fail (uri != NULL, FALSE);
+
+ if (!gnome_keyring_is_available ())
+ return FALSE;
+
+ if (flags == G_PASSWORD_SAVE_NEVER)
+ return FALSE;
+
+ keyring = (flags == G_PASSWORD_SAVE_FOR_SESSION) ? "session" : NULL;
+ unescaped_uri = g_uri_unescape_string (uri, NULL);
+ name = g_strdup_printf (_("Password for document %s"), unescaped_uri);
+ g_free (unescaped_uri);
+
+ result = gnome_keyring_store_password_sync (EV_DOCUMENT_PASSWORD_SCHEMA,
+ keyring, name, password,
+ "type", "document_password",
+ "uri", uri,
+ NULL);
+ g_free (name);
+
+ return (result == GNOME_KEYRING_RESULT_OK);
+#else
+ return FALSE;
+#endif /* WITH_KEYRING */
+}