From aeb9888f7f944b8f27b4f3a20a6896bf012b9bab Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 9 Feb 2024 22:51:37 +0100 Subject: [PATCH 1/3] Fix incorrect binary path --- com.quexten.Goldwarden.yml | 8 ++++---- gui/src/services/goldwarden.py | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/com.quexten.Goldwarden.yml b/com.quexten.Goldwarden.yml index 8346b58..ff413c6 100644 --- a/com.quexten.Goldwarden.yml +++ b/com.quexten.Goldwarden.yml @@ -17,12 +17,12 @@ finish-args: - --talk-name=org.gnome.ScreenSaver - --talk-name=org.freedesktop.ScreenSaver + # Lock on idle + - --talk-name=org.gnome.Mutter.IdleMonitor + # Notifications - --talk-name=org.freedesktop.Notifications - # Home directory access to setup browser ipc, can posibly restrict this further if requried by listing each browser's nativehost directory separately - - --filesystem=home - # pinentry & approval - --talk-name=org.gnome.keyring.SystemPrompter # biometric / user password auth @@ -51,7 +51,7 @@ modules: - name: goldwarden-core-daemon buildsystem: simple build-commands: - - install -D goldwarden /app/bin/src/goldwarden + - install -D goldwarden /app/bin/goldwarden sources: - type: file path: ./goldwarden \ No newline at end of file diff --git a/gui/src/services/goldwarden.py b/gui/src/services/goldwarden.py index af78447..141cb19 100644 --- a/gui/src/services/goldwarden.py +++ b/gui/src/services/goldwarden.py @@ -3,6 +3,8 @@ import json import os from pathlib import Path from threading import Thread +from shutil import which +import sys is_flatpak = os.path.exists("/.flatpak-info") log_directory = str(Path.home()) + "/.local/share/goldwarden" @@ -17,19 +19,18 @@ BINARY_PATHS = [ str(Path.home()) + "/go/src/github.com/quexten/goldwarden/goldwarden" ] -BINARY_PATH = "" BINARY_PATH = None for path in BINARY_PATHS: if os.path.exists(path): BINARY_PATH = path break -if BINARY_PATH == None: +if BINARY_PATH is None: BINARY_PATH = which('goldwarden') if isinstance(BINARY_PATH,str): BINARY_PATH = BINARY_PATH.strip() -if BINARY_PATH == None: +if BINARY_PATH is None: print("goldwarden executable not found") sys.exit() From 76baf9eca0e42d29ffb11aaad104618771818cd7 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 9 Feb 2024 22:52:21 +0100 Subject: [PATCH 2/3] Improve quick-access keyboard navigation --- gui/src/gui/quickaccess.py | 58 ++++++++++++++++++++++++-------------- gui/src/gui/settings.py | 10 ++++++- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/gui/src/gui/quickaccess.py b/gui/src/gui/quickaccess.py index 2163349..d1b1930 100644 --- a/gui/src/gui/quickaccess.py +++ b/gui/src/gui/quickaccess.py @@ -52,12 +52,12 @@ class MainWindow(Gtk.ApplicationWindow): # on type func def on_type(entry): if len(entry.get_text()) > 1: - self.history_list.show() + self.results_list.show() else: - self.history_list.hide() + self.results_list.hide() - while self.history_list.get_first_child() != None: - self.history_list.remove(self.history_list.get_first_child()) + while self.results_list.get_first_child() != None: + self.results_list.remove(self.results_list.get_first_child()) self.filtered_logins = list(filter(lambda i: entry.get_text().lower() in i["name"].lower(), self.logins)) if len( self.filtered_logins) > 10: @@ -77,25 +77,38 @@ class MainWindow(Gtk.ApplicationWindow): action_row.uuid = i["uuid"] action_row.uri = i["uri"] action_row.totp = i["totp"] - self.history_list.append(action_row) + self.results_list.append(action_row) self.starts_with_logins = None self.other_logins = None self.text_view.connect("changed", lambda entry: on_type(entry)) self.box.append(self.text_view) - self.history_list = Gtk.ListBox() + self.results_list = Gtk.ListBox() # margin' - self.history_list.set_margin_start(10) - self.history_list.set_margin_end(10) - self.history_list.set_margin_top(10) - self.history_list.set_margin_bottom(10) - self.history_list.hide() + self.results_list.set_margin_start(10) + self.results_list.set_margin_end(10) + self.results_list.set_margin_top(10) + self.results_list.set_margin_bottom(10) + self.results_list.hide() keycont = Gtk.EventControllerKey() def handle_keypress(cotroller, keyval, keycode, state, user_data): # if ctrl is pressed if state == 4: print("ctrl") + + if keycode == 9: + print("esc") + os._exit(0) + + if keyval == 65364: + # focus results + if self.results_list.get_first_child() != None: + self.results_list.get_first_child().grab_focus() + + if keyval == 113: + return False + if keycode == 36: print("enter") self.hide() @@ -103,16 +116,16 @@ class MainWindow(Gtk.ApplicationWindow): time.sleep(0.5) goldwarden.autotype(username, password) os._exit(0) - autotypeThread = Thread(target=do_autotype, args=(self.history_list.get_selected_row().username, self.history_list.get_selected_row().password,)) + autotypeThread = Thread(target=do_autotype, args=(self.results_list.get_selected_row().username, self.results_list.get_selected_row().password,)) autotypeThread.start() - print(self.history_list.get_selected_row().get_title()) + print(self.results_list.get_selected_row().get_title()) if keyval == 112: print("copy password") - clipboard.write(self.history_list.get_selected_row().password) + clipboard.write(self.results_list.get_selected_row().password) Notify.Notification.new("Goldwarden", "Password Copied", "dialog-information").show() elif keyval == 117: print("copy username") - clipboard.write(self.history_list.get_selected_row().username) + clipboard.write(self.results_list.get_selected_row().username) notification=Notify.Notification.new("Goldwarden", "Username Copied", "dialog-information") notification.set_timeout(5) notification.show() @@ -121,25 +134,28 @@ class MainWindow(Gtk.ApplicationWindow): environment = goldwarden.get_environment() if environment == None: return - item_uri = environment["vault"] + "#/vault?itemId=" + self.history_list.get_selected_row().uuid + item_uri = environment["vault"] + "#/vault?itemId=" + self.results_list.get_selected_row().uuid Gtk.show_uri(None, item_uri, Gdk.CURRENT_TIME) elif keyval == 108: print("launch") - print(self.history_list.get_selected_row().uri) - Gtk.show_uri(None, self.history_list.get_selected_row().uri, Gdk.CURRENT_TIME) + print(self.results_list.get_selected_row().uri) + Gtk.show_uri(None, self.results_list.get_selected_row().uri, Gdk.CURRENT_TIME) elif keyval == 116: print("copy totp") - totp_code = totp.totp(self.history_list.get_selected_row().totp) + totp_code = totp.totp(self.results_list.get_selected_row().totp) clipboard.write(totp_code) notification=Notify.Notification.new("Goldwarden", "Totp Copied", "dialog-information") notification.set_timeout(5) notification.show() + elif keyval == 102: + # focus search + self.text_view.grab_focus() keycont.connect('key-pressed', handle_keypress, self) self.add_controller(keycont) - self.history_list.get_style_context().add_class("boxed-list") - self.box.append(self.history_list) + self.results_list.get_style_context().add_class("boxed-list") + self.box.append(self.results_list) self.set_default_size(700, 700) self.set_title("Goldwarden Quick Access") diff --git a/gui/src/gui/settings.py b/gui/src/gui/settings.py index 6af226b..3fc1a06 100644 --- a/gui/src/gui/settings.py +++ b/gui/src/gui/settings.py @@ -136,7 +136,15 @@ class SettingsWinvdow(Gtk.ApplicationWindow): self.launch_web_vault_shortcut_row.set_subtitle("V") self.shortcut_preferences_group.add(self.launch_web_vault_shortcut_row) - + self.focus_search_shortcut_row = Adw.ActionRow() + self.focus_search_shortcut_row.set_title("Focus Search Shortcut") + self.focus_search_shortcut_row.set_subtitle("F") + self.shortcut_preferences_group.add(self.focus_search_shortcut_row) + + self.quit_shortcut_row = Adw.ActionRow() + self.quit_shortcut_row.set_title("Quit Shortcut") + self.quit_shortcut_row.set_subtitle("Esc") + self.shortcut_preferences_group.add(self.quit_shortcut_row) self.vault_status_preferences_group = Adw.PreferencesGroup() self.vault_status_preferences_group.set_title("Vault Status") From 86848065d122e4aa1a65fbf4f3e31a712d47f7b1 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Sat, 10 Feb 2024 16:35:58 +0100 Subject: [PATCH 3/3] Fix ui row selection on keyboard navigation --- gui/src/gui/quickaccess.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gui/src/gui/quickaccess.py b/gui/src/gui/quickaccess.py index d1b1930..9aaf0d6 100644 --- a/gui/src/gui/quickaccess.py +++ b/gui/src/gui/quickaccess.py @@ -105,6 +105,7 @@ class MainWindow(Gtk.ApplicationWindow): # focus results if self.results_list.get_first_child() != None: self.results_list.get_first_child().grab_focus() + self.results_list.select_row(self.results_list.get_first_child()) if keyval == 113: return False