Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved keyboard navigation on ui #114

Merged
merged 3 commits into from
Feb 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions com.quexten.Goldwarden.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
59 changes: 38 additions & 21 deletions gui/src/gui/quickaccess.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ def __init__(self, *args, **kwargs):
# 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:
Expand All @@ -77,42 +77,56 @@ def on_type(entry):
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()
self.results_list.select_row(self.results_list.get_first_child())

if keyval == 113:
return False

if keycode == 36:
print("enter")
self.hide()
def do_autotype(username, password):
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()
Expand All @@ -121,25 +135,28 @@ def do_autotype(username, password):
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")

Expand Down
10 changes: 9 additions & 1 deletion gui/src/gui/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,15 @@ def unlock_button_clicked():
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")
Expand Down
7 changes: 4 additions & 3 deletions gui/src/services/goldwarden.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
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"
Expand All @@ -17,19 +19,18 @@
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()

Expand Down
Loading