From bed2f590521a65a262f1dd6f85981cf34ff8568c Mon Sep 17 00:00:00 2001 From: Jonathan Lestrelin Date: Wed, 15 Mar 2017 18:24:51 +0100 Subject: [PATCH] * add gpaste support * remove call to qtpass * minor changes --- README.md | 37 ++++++++++++----------------------- TODO.md | 6 +----- gnome-pass-search-provider.py | 26 ++++++++++++++---------- 3 files changed, 30 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index f8aec5d..7bdbee1 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,7 @@ Names of passwords will show up in GNOME Shell searches, choosing one will copy ## Manual -Ensure that python-gobject is installed on your system (probably already the case): -```shell -$PACKAGE_MANAGER install python-gobject -``` +Ensure that python>=3.5 and python-gobject are installed on your system and that pass is setup. Download or clone this repository: ```shell @@ -31,36 +28,28 @@ If you need to you can change the installation paths to suit your system: sudo SYSCONFDIR=/etc DATADIR=/usr/share LIBDIR=/usr/lib LIBEXECDIR=/usr/lib ./install.sh ``` +Recommended : set gpg agent to use pinentry-gnome3 by adding `pinentry-program /usr/bin/pinentry-gnome3` to `~/.gnupg/.gpg-agent.conf`. + Close and reopen your GNOME session or (if not on Wayland) just restart the Shell (alt + f2, r). -The search provider should show up and be enabled in Gnome search preferences and be autoloaded by GNOME Shell. +The search provider should show up and be enabled in GNOME search preferences and started on demand by GNOME Shell. # Environment variables -If you are configuring pass through environment variables, such as `PASSWORD_STORE_DIR`, make sure to set them in a way that will propagate to the search provider executable. -If you are on a systemd-based system, you can set them in the unit file : +If you are configuring pass through environment variables, such as `PASSWORD_STORE_DIR`, make sure to set them in a way that will propagate to the search provider executable, not just in your shell. +Setting them in `~/.profile` should be sufficient. -```shell -systemctl --user edit org.gnome.Pass.SearchProvider.service -``` +# Clipboard managers -Add your variables like this : -```ini -[Service] -Environment=PASSWORD_STORE_DIR=/my/passwords/path -``` -Then restart the service : - -```shell -systemctl --user restart org.gnome.Pass.SearchProvider.service -``` +If you are using GPaste, passwords will be sent to it marked as passwords, thus ensuring they are not visible. +Otherwise they are sent to the clipboard using `pass -c` which defaults to expiration after 45 seconds. # Compatibility This implements the `org.gnome.Shell.SearchProvider2` D-Bus API. -I'm not sure since when this has been in Gnome nor until when it will stay. -This works fine on Gnome 3.22 and I expect it will continue to work for some time with ulterior versions. +I'm not sure since when this has been in GNOME nor until when it will stay. +This works fine on GNOME 3.22 and I expect it will continue to work for some time with ulterior versions. # Troubleshooting -If this does not work for you, make sure to look to wherever Gnome and D-Bus are logging for error messages (in the journal on systemd-using systems). - +If this does not work for you, make sure to look to wherever GNOME and D-Bus are logging for error messages (in the journal on systemd-using systems). +Don't hesitate to open an issue. diff --git a/TODO.md b/TODO.md index 2e02579..7ccb010 100644 --- a/TODO.md +++ b/TODO.md @@ -1,7 +1,3 @@ -* Add a configuration dialog so that passing environment variables to pass is easier. -* Fix the problem of pinentry unable to show up if not called from pass before. * Make packages. -* Find a good way of implementing LaunchSearch. -* Make the daemon exit after some time. -* Call into GPaste if present to mark item as password. +* Find something to do when LaunchSearch is called. * Change icon to one that is present in GNOME default theme. diff --git a/gnome-pass-search-provider.py b/gnome-pass-search-provider.py index da2f638..51e8d1d 100755 --- a/gnome-pass-search-provider.py +++ b/gnome-pass-search-provider.py @@ -25,10 +25,10 @@ # Copyright (C) 2012 Red Hat, Inc. # Author: Luke Macken -from subprocess import call +import subprocess +import re from os import walk, getenv from os.path import expanduser -import re from gi.repository import GLib @@ -50,13 +50,8 @@ class SearchPassService(dbus.service.Object): """ bus_name = 'org.gnome.Pass.SearchProvider' - enabled = False - - _search_cache = {} - _request_cache = {} _object_path = '/' + bus_name.replace('.', '/') - __name__ = 'SearchPassService' def __init__(self): self.session_bus = dbus.SessionBus() @@ -83,8 +78,7 @@ class SearchPassService(dbus.service.Object): @dbus.service.method(in_signature='asu', terms='as', timestamp='u', **sbn) def LaunchSearch(self, terms, timestamp): - # FIXME: unstable - call(['qtpass'] + terms) + pass def get_result_set(self, terms): names = [] @@ -105,7 +99,19 @@ class SearchPassService(dbus.service.Object): return names def send_password_to_clipboard(self, name): - call(['pass', 'show', '-c', name]) + try: + pass_cmd = subprocess.run(['pass', 'show', name], + stdout=subprocess.PIPE) + password = re.sub(b'\n$', b'', pass_cmd.stdout) + if not pass_cmd.returncode: + session_bus = dbus.SessionBus() + gpaste_dbus = session_bus.get_object('org.gnome.GPaste.Daemon', + '/org/gnome/GPaste') + gpaste_dbus.AddPassword(name, + password, + dbus_interface='org.gnome.GPaste1') + except dbus.DBusException: + subprocess.run(['pass', 'show', '-c', name]) def main(): service = SearchPassService()