diff --git a/cli/agent/systemauth/pinentry/go-pinentry.go b/cli/agent/systemauth/pinentry/go-pinentry.go index 673950a..648a7e3 100644 --- a/cli/agent/systemauth/pinentry/go-pinentry.go +++ b/cli/agent/systemauth/pinentry/go-pinentry.go @@ -1,16 +1,22 @@ -//go:build freebsd || linux +//go:build freebsd || linux || darwin package pinentry import ( "errors" + "runtime" "github.com/twpayne/go-pinentry" ) func getPassword(title string, description string) (string, error) { + binaryClientOption := pinentry.WithBinaryNameFromGnuPGAgentConf() + if runtime.GOOS == "darwin" { + binaryClientOption = pinentry.WithBinaryName("pinentry-mac") + } + client, err := pinentry.NewClient( - pinentry.WithBinaryNameFromGnuPGAgentConf(), + binaryClientOption, pinentry.WithGPGTTY(), pinentry.WithTitle(title), pinentry.WithDesc(description), diff --git a/cli/agent/systemauth/pinentry/keybase-pinentry.go b/cli/agent/systemauth/pinentry/keybase-pinentry.go index 0071fdd..a3486de 100644 --- a/cli/agent/systemauth/pinentry/keybase-pinentry.go +++ b/cli/agent/systemauth/pinentry/keybase-pinentry.go @@ -1,4 +1,4 @@ -//go:build windows || darwin +//go:build windows package pinentry diff --git a/gui/goldwarden_ui_main.py b/gui/goldwarden_ui_main.py index d6df4d2..e739a28 100755 --- a/gui/goldwarden_ui_main.py +++ b/gui/goldwarden_ui_main.py @@ -1,4 +1,12 @@ #!/usr/bin/env python3 -import src.linux.main as linux_main -linux_main.main() \ No newline at end of file +import platform + +if platform.system() == 'Darwin': + import src.macos.main as macos_main + macos_main.main() +elif platform.system() == 'Linux': + import src.linux.main as linux_main + linux_main.main() +else: + print("Unsupported OS " + platform.system() + "... exiting...") \ No newline at end of file diff --git a/gui/src/gui/quickaccess.py b/gui/src/gui/quickaccess.py index 4030814..3a08268 100644 --- a/gui/src/gui/quickaccess.py +++ b/gui/src/gui/quickaccess.py @@ -1,10 +1,10 @@ import gi gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') -gi.require_version('Notify', '0.7') +# gi.require_version('Notify', '0.7') import gc import time -from gi.repository import Gtk, Adw, GLib, Notify, Gdk +from gi.repository import Gtk, Adw, GLib, Gdk from ..services import goldwarden from ..services.autotype import autotype from threading import Thread @@ -12,7 +12,6 @@ from .resource_loader import load_template import sys import os from ..services import totp -Notify.init("Goldwarden") class GoldwardenQuickAccessApp(Adw.Application): def __init__(self, **kwargs): @@ -115,8 +114,8 @@ class GoldwardenQuickAccessApp(Adw.Application): def run_autotype(self, text): def perform_autotype(text): - self.window.hide() - time.sleep(0.1) + GLib.idle_add(self.window.hide) + time.sleep(2) autotype.autotype(text) time.sleep(0.1) os._exit(0) @@ -148,7 +147,7 @@ class GoldwardenQuickAccessApp(Adw.Application): self.filtered_logins = self.filtered_logins[0:7] def render_list(self): - if len(self.filtered_logins) > 1: + if len(self.filtered_logins) > 0: self.results_list.set_visible(True) while self.results_list.get_first_child() != None: self.results_list.remove(self.results_list.get_first_child()) diff --git a/gui/src/gui/settings.py b/gui/src/gui/settings.py index ab88cd2..fc38fa2 100644 --- a/gui/src/gui/settings.py +++ b/gui/src/gui/settings.py @@ -101,8 +101,7 @@ class GoldwardenSettingsApp(Adw.Application): if status == None: is_daemon_running = goldwarden.is_daemon_running() if not is_daemon_running: - self.status_row.set_subtitle("Daemon not running") - self.vault_status_icon.set_icon("dialog-error", "error") + print("Daemon not running") return logged_in = status["loggedIn"] diff --git a/gui/src/macos/main.py b/gui/src/macos/main.py new file mode 100644 index 0000000..cf8f94e --- /dev/null +++ b/gui/src/macos/main.py @@ -0,0 +1,30 @@ +import sys +import subprocess +import os +import secrets +from src.services import goldwarden +from src.services import pinentry +import time + +root_path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, os.pardir)) + +def main(): + token = secrets.token_hex(32) + if not os.environ.get("GOLDWARDEN_DAEMON_AUTH_TOKEN") == None: + token = os.environ["GOLDWARDEN_DAEMON_AUTH_TOKEN"] + print("Starting Goldwarden GUI") + goldwarden.run_daemon_background(token) + time.sleep(1) + #pinentry.daemonize() + if not "--hidden" in sys.argv: + p = subprocess.Popen(["python3", "-m", "src.gui.settings"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=root_path, start_new_session=True) + p.stdin.write(f"{token}\n".encode()) + p.stdin.flush() + # print stdout + while True: + line = p.stderr.readline() + if not line: + break + print(line.decode().strip()) + while True: + time.sleep(60) \ No newline at end of file diff --git a/gui/src/services/autotype/pyautogui_autotype.py b/gui/src/services/autotype/pyautogui_autotype.py index 3b8057a..0a9214b 100644 --- a/gui/src/services/autotype/pyautogui_autotype.py +++ b/gui/src/services/autotype/pyautogui_autotype.py @@ -2,4 +2,7 @@ import pyautogui def autotype_pyautogui(text): print("autotypeing with pyautogui") - pyautogui.write(text, interval=0.02) \ No newline at end of file + pyautogui.write(text, interval=0.02) + +if __name__ == "__main__": + autotype_pyautogui("hello world") \ No newline at end of file