-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 The attached patch registers a fallback credentials store that uses the GNOME keyring to retrieve passwords. It will not store new passwords in the GNOME keyring.
This integration will also only be enabled in case that the GNOME keyring python module is actually installed on the system. Cheers, Jelmer -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iJwEAQECAAYFAkob/LYACgkQDLQl4QYPZuUYZwP+LRqrr8AAJa+fULxT9XLsiGuS e+CtRZEfs2PxjIEs2DDPf4s5NdZFwPjR1qH3YEBWGPD6w06J9ErFciA5mTISMfbx stiPQkCDW09oPQ1sCJLtLljrmeILurOjQE2XPNTkLSLMIONlhncGoZ4N8DdR5N7w T1/rDlmGxlus9hYpzE4= =w03l -----END PGP SIGNATURE-----
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: lp:bzr-gtk # testament_sha1: 3d287f06b04891808ca3129a8595b2234149ea07 # timestamp: 2009-05-26 16:26:48 +0200 # base_revision_id: [email protected]\ # zhtopap2bn9vjtpc # # Begin patch === modified file 'NEWS' --- NEWS 2009-05-11 13:46:33 +0000 +++ NEWS 2009-05-21 20:26:23 +0000 @@ -16,6 +16,11 @@ * Mark as compatible with bzr 1.13. + FEATURES + + * Support storing credentials in the GNOME Keyring if it is + available. (Jelmer Vernooij) + 0.95.0 2008-08-04 UI === modified file '__init__.py' --- __init__.py 2009-05-07 09:41:56 +0000 +++ __init__.py 2009-05-21 20:26:23 +0000 @@ -36,7 +36,10 @@ import bzrlib import bzrlib.api -from bzrlib import errors +from bzrlib import ( + config, + errors, + ) from bzrlib.commands import plugin_cmds import os.path @@ -150,6 +153,19 @@ return "No DISPLAY. Unable to run GTK+ application." +credential_store_registry = getattr(config, "credential_store_registry", None) +if credential_store_registry is not None: + try: + credential_store_registry.register_lazy( + "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore", + help="The GNOME Keyring.", fallback=True) + except TypeError: + # Fallback credentials stores were introduced in Bazaar 1.15 + credential_store_registry.register_lazy( + "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore", + help="The GNOME Keyring.") + + def load_tests(basic_tests, module, loader): testmod_names = [ 'tests', === added file 'keyring.py' --- keyring.py 1970-01-01 00:00:00 +0000 +++ keyring.py 2009-05-21 21:00:16 +0000 @@ -0,0 +1,77 @@ +# Copyright (C) 2009 Jelmer Vernooij <[email protected]> + +# This program 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. + +# This program 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 + +import gobject +try: + import gnomekeyring +except ImportError: + gnomekeyring = None + +from bzrlib.config import ( + CredentialStore, + ) + + +class GnomeKeyringCredentialStore(CredentialStore): + + def __init__(self): + CredentialStore.__init__(self) + # External apps that load bzrlib may also set this, so + # don't override: + if gobject.get_application_name() is None: + gobject.set_application_name("bzr") + + def decode_password(self, credentials): + if gnomekeyring is None: + return None + attrs = {} + if "scheme" in credentials: + attrs["protocol"] = credentials["scheme"].encode("utf-8") + if "host" in credentials: + attrs["server"] = credentials["host"].encode("utf-8") + if "user" in credentials: + attrs["user"] = credentials["user"].encode("utf-8") + if credentials.get("port") is not None: + attrs["port"] = credentials["port"] + try: + items = gnomekeyring.find_items_sync( + gnomekeyring.ITEM_NETWORK_PASSWORD, attrs) + return items[0].secret + except (gnomekeyring.NoMatchError, gnomekeyring.DeniedError): + return None + + def get_credentials(self, scheme, host, port=None, user=None, path=None, + realm=None): + if gnomekeyring is None: + return None + attrs = { + "protocol": scheme.encode("utf-8"), + "server": host.encode("utf-8"), + } + # TODO: realm ? + if port is not None: + attrs["port"] = port + if user is not None: + attrs["user"] = user.encode("utf-8") + credentials = { "scheme": scheme, "host": host, "port": port, + "realm": realm, "user": user} + try: + items = gnomekeyring.find_items_sync( + gnomekeyring.ITEM_NETWORK_PASSWORD, attrs) + credentials["user"] = items[0].attributes["user"] + credentials["password"] = items[0].secret + except (gnomekeyring.NoMatchError, gnomekeyring.DeniedError): + return None # Begin bundle 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
-- bzr-gtk mailing list [email protected] Modify settings or unsubscribe at: https://lists.canonical.com/mailman/listinfo/bzr-gtk
