[gthumb: 6/10] [flickr] store the token in the gnome keyring if available
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb: 6/10] [flickr] store the token in the gnome keyring if available
- Date: Tue, 6 Apr 2010 23:23:48 +0000 (UTC)
commit 441966620ae069636228e0ebe069a572b3e21c04
Author: Paolo Bacchilega <paobac src gnome org>
Date: Wed Apr 7 00:54:00 2010 +0200
[flickr] store the token in the gnome keyring if available
extensions/flicker/Makefile.am | 4 +-
extensions/flicker/flickr-account.c | 18 ++++++-
extensions/flicker/flickr-authentication.c | 80 ++++++++++++++++++++++++++-
3 files changed, 95 insertions(+), 7 deletions(-)
---
diff --git a/extensions/flicker/Makefile.am b/extensions/flicker/Makefile.am
index 3730c22..d5dc98d 100644
--- a/extensions/flicker/Makefile.am
+++ b/extensions/flicker/Makefile.am
@@ -35,9 +35,9 @@ libflicker_la_SOURCES = \
flickr-user.h \
main.c
-libflicker_la_CFLAGS = $(GTHUMB_CFLAGS) $(LIBSOUP_CFLAGS) -I$(top_srcdir) -I$(top_builddir)/gthumb
+libflicker_la_CFLAGS = $(GTHUMB_CFLAGS) $(LIBSOUP_CFLAGS) $(GNOME_KEYRING_CFLAGS) -I$(top_srcdir) -I$(top_builddir)/gthumb
libflicker_la_LDFLAGS = $(EXTENSION_LIBTOOL_FLAGS)
-libflicker_la_LIBADD = $(GTHUMB_LIBS) $(LIBSOUP_LIBS)
+libflicker_la_LIBADD = $(GTHUMB_LIBS) $(LIBSOUP_LIBS) $(GNOME_KEYRING_LIBS)
libflicker_la_DEPENDENCIES = $(top_builddir)/gthumb/gthumb$(EXEEXT)
extensioninidir = $(extensiondir)
diff --git a/extensions/flicker/flickr-account.c b/extensions/flicker/flickr-account.c
index 1242e11..aa1fda4 100644
--- a/extensions/flicker/flickr-account.c
+++ b/extensions/flicker/flickr-account.c
@@ -23,6 +23,9 @@
#include <config.h>
#include <stdlib.h>
#include <string.h>
+#ifdef HAVE_GNOME_KEYRING
+#include <gnome-keyring.h>
+#endif /* HAVE_GNOME_KEYRING */
#include <gthumb.h>
#include "flickr-account.h"
@@ -57,15 +60,26 @@ flickr_account_create_element (DomDomizable *base,
DomDocument *doc)
{
FlickrAccount *self;
- DomElement *element;
+ DomElement *element;
+ gboolean set_token;
self = FLICKR_ACCOUNT (base);
element = dom_document_create_element (doc, "account", NULL);
if (self->username != NULL)
dom_element_set_attribute (element, "username", self->username);
- if (self->token != NULL)
+
+ /* Don't save the token in the configuration file if gnome-keyring is
+ * available. */
+
+ set_token = TRUE;
+#ifdef HAVE_GNOME_KEYRING
+ if (gnome_keyring_is_available ())
+ set_token = FALSE;
+#endif
+ if (set_token && (self->token != NULL))
dom_element_set_attribute (element, "token", self->token);
+
if (self->is_default)
dom_element_set_attribute (element, "default", "1");
diff --git a/extensions/flicker/flickr-authentication.c b/extensions/flicker/flickr-authentication.c
index 845f081..c4ea164 100644
--- a/extensions/flicker/flickr-authentication.c
+++ b/extensions/flicker/flickr-authentication.c
@@ -22,6 +22,9 @@
#include <config.h>
#include <glib.h>
+#ifdef HAVE_GNOME_KEYRING
+#include <gnome-keyring.h>
+#endif /* HAVE_GNOME_KEYRING */
#include "flickr-account-chooser-dialog.h"
#include "flickr-account-manager-dialog.h"
#include "flickr-authentication.h"
@@ -199,11 +202,16 @@ upload_status_ready_cb (GObject *source_object,
}
+static void start_authorization_process (FlickrAuthentication *self);
+
+
static void
-connect_to_server (FlickrAuthentication *self)
+connect_to_server_step2 (FlickrAuthentication *self)
{
- g_return_if_fail (self->priv->account != NULL);
-
+ if (self->priv->account->token == NULL) {
+ start_authorization_process (self);
+ return;
+ }
flickr_connection_set_auth_token (self->priv->conn, self->priv->account->token);
flickr_service_get_upload_status (self->priv->service,
self->priv->cancellable,
@@ -212,6 +220,44 @@ connect_to_server (FlickrAuthentication *self)
}
+#ifdef HAVE_GNOME_KEYRING
+static void
+find_password_cb (GnomeKeyringResult result,
+ const char *string,
+ gpointer user_data)
+{
+ FlickrAuthentication *self = user_data;
+
+ if (string != NULL)
+ self->priv->account->token = g_strdup (string);
+ connect_to_server_step2 (self);
+}
+#endif
+
+
+static void
+connect_to_server (FlickrAuthentication *self)
+{
+ g_return_if_fail (self->priv->account != NULL);
+
+#ifdef HAVE_GNOME_KEYRING
+ if ((self->priv->account->token == NULL) && gnome_keyring_is_available ()) {
+ gnome_keyring_find_password (GNOME_KEYRING_NETWORK_PASSWORD,
+ find_password_cb,
+ self,
+ NULL,
+ "user", self->priv->account->username,
+ "server", self->priv->conn->server->url,
+ "protocol", "http",
+ NULL);
+ return;
+ }
+#endif
+
+ connect_to_server_step2 (self);
+}
+
+
static void
set_account (FlickrAuthentication *self,
FlickrAccount *account)
@@ -234,6 +280,17 @@ set_account (FlickrAuthentication *self,
}
+#ifdef HAVE_GNOME_KEYRING
+static void
+store_password_done_cb (GnomeKeyringResult result,
+ gpointer user_data)
+{
+ FlickrAuthentication *self = user_data;
+ connect_to_server (self);
+}
+#endif
+
+
static void
connection_token_ready_cb (GObject *source_object,
GAsyncResult *res,
@@ -257,6 +314,23 @@ connection_token_ready_cb (GObject *source_object,
set_account (self, account);
g_object_unref (account);
+#ifdef HAVE_GNOME_KEYRING
+ if (gnome_keyring_is_available ()) {
+ gnome_keyring_store_password (GNOME_KEYRING_NETWORK_PASSWORD,
+ GNOME_KEYRING_SESSION,
+ self->priv->conn->server->name,
+ flickr_connection_get_auth_token (self->priv->conn),
+ store_password_done_cb,
+ self,
+ NULL,
+ "user", flickr_connection_get_username (self->priv->conn),
+ "server", self->priv->conn->server->url,
+ "protocol", "http",
+ NULL);
+ return;
+ }
+#endif
+
connect_to_server (self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]