Add item uuid launch to quick access menu
This commit is contained in:
parent
8eb55f2808
commit
2f21f27da9
3 changed files with 90 additions and 70 deletions
|
|
@ -3,7 +3,7 @@ gi.require_version('Gtk', '4.0')
|
||||||
gi.require_version('Adw', '1')
|
gi.require_version('Adw', '1')
|
||||||
import gc
|
import gc
|
||||||
import time
|
import time
|
||||||
from gi.repository import Gtk, Adw, GLib, Notify
|
from gi.repository import Gtk, Adw, GLib, Notify, Gdk
|
||||||
import goldwarden
|
import goldwarden
|
||||||
import clipboard
|
import clipboard
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
@ -65,6 +65,7 @@ class MainWindow(Gtk.ApplicationWindow):
|
||||||
action_row.set_activatable(True)
|
action_row.set_activatable(True)
|
||||||
action_row.password = i["password"]
|
action_row.password = i["password"]
|
||||||
action_row.username = i["username"]
|
action_row.username = i["username"]
|
||||||
|
action_row.uuid = i["uuid"]
|
||||||
self.history_list.append(action_row)
|
self.history_list.append(action_row)
|
||||||
self.starts_with_logins = None
|
self.starts_with_logins = None
|
||||||
self.other_logins = None
|
self.other_logins = None
|
||||||
|
|
@ -101,6 +102,13 @@ class MainWindow(Gtk.ApplicationWindow):
|
||||||
notification=Notify.Notification.new("Goldwarden", "Username Copied", "dialog-information")
|
notification=Notify.Notification.new("Goldwarden", "Username Copied", "dialog-information")
|
||||||
notification.set_timeout(5)
|
notification.set_timeout(5)
|
||||||
notification.show()
|
notification.show()
|
||||||
|
elif keyval == 118:
|
||||||
|
print("open web vault")
|
||||||
|
environment = goldwarden.get_environment()
|
||||||
|
if environment == None:
|
||||||
|
return
|
||||||
|
item_uri = environment["vault"] + "#/vault?itemId=" + self.history_list.get_selected_row().uuid
|
||||||
|
Gtk.show_uri(None, item_uri, Gdk.CURRENT_TIME)
|
||||||
|
|
||||||
keycont.connect('key-pressed', handle_keypress, self)
|
keycont.connect('key-pressed', handle_keypress, self)
|
||||||
self.add_controller(keycont)
|
self.add_controller(keycont)
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,31 @@ def set_notification_url(url):
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
raise Exception("Failed to initialize repository, err", result.stderr)
|
raise Exception("Failed to initialize repository, err", result.stderr)
|
||||||
|
|
||||||
|
def set_vault_url(url):
|
||||||
|
restic_cmd = f"{BINARY_PATH} config set-vault-url {url}"
|
||||||
|
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise Exception("Failed err", result.stderr)
|
||||||
|
|
||||||
|
def set_url(url):
|
||||||
|
restic_cmd = f"{BINARY_PATH} config set-url {url}"
|
||||||
|
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise Exception("Failed err", result.stderr)
|
||||||
|
|
||||||
|
def get_environment():
|
||||||
|
restic_cmd = f"{BINARY_PATH} config get-environment"
|
||||||
|
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
||||||
|
if result.returncode != 0:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
result_text = result.stdout
|
||||||
|
print(result_text)
|
||||||
|
return json.loads(result_text)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
return None
|
||||||
|
|
||||||
def set_client_id(client_id):
|
def set_client_id(client_id):
|
||||||
restic_cmd = f"{BINARY_PATH} config set-client-id \"{client_id}\""
|
restic_cmd = f"{BINARY_PATH} config set-client-id \"{client_id}\""
|
||||||
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
result = subprocess.run(restic_cmd.split(), capture_output=True, text=True)
|
||||||
|
|
|
||||||
125
ui/settings.py
125
ui/settings.py
|
|
@ -39,6 +39,57 @@ class SettingsWinvdow(Gtk.ApplicationWindow):
|
||||||
self.preferences_page.set_title("General")
|
self.preferences_page.set_title("General")
|
||||||
self.stack.add_named(self.preferences_page, "preferences_page")
|
self.stack.add_named(self.preferences_page, "preferences_page")
|
||||||
|
|
||||||
|
self.action_preferences_group = Adw.PreferencesGroup()
|
||||||
|
self.action_preferences_group.set_title("Actions")
|
||||||
|
self.preferences_page.add(self.action_preferences_group)
|
||||||
|
|
||||||
|
self.autotype_button = Gtk.Button()
|
||||||
|
self.autotype_button.set_label("Quick Access")
|
||||||
|
self.autotype_button.set_margin_top(10)
|
||||||
|
self.autotype_button.connect("clicked", lambda button: subprocess.Popen(["python3", "/app/bin/autofill.py"], start_new_session=True))
|
||||||
|
self.autotype_button.get_style_context().add_class("suggested-action")
|
||||||
|
self.action_preferences_group.add(self.autotype_button)
|
||||||
|
|
||||||
|
self.login_button = Gtk.Button()
|
||||||
|
self.login_button.set_label("Login")
|
||||||
|
self.login_button.connect("clicked", lambda button: show_login())
|
||||||
|
self.login_button.set_sensitive(False)
|
||||||
|
self.login_button.set_margin_top(10)
|
||||||
|
self.login_button.get_style_context().add_class("suggested-action")
|
||||||
|
self.action_preferences_group.add(self.login_button)
|
||||||
|
|
||||||
|
self.set_pin_button = Gtk.Button()
|
||||||
|
self.set_pin_button.set_label("Set Pin")
|
||||||
|
self.set_pin_button.connect("clicked", lambda button: set_pin())
|
||||||
|
self.set_pin_button.set_margin_top(10)
|
||||||
|
self.set_pin_button.set_sensitive(False)
|
||||||
|
self.set_pin_button.get_style_context().add_class("suggested-action")
|
||||||
|
self.action_preferences_group.add(self.set_pin_button)
|
||||||
|
|
||||||
|
self.unlock_button = Gtk.Button()
|
||||||
|
self.unlock_button.set_label("Unlock")
|
||||||
|
self.unlock_button.set_margin_top(10)
|
||||||
|
def unlock_button_clicked():
|
||||||
|
action = goldwarden.unlock if self.unlock_button.get_label() == "Unlock" else goldwarden.lock
|
||||||
|
unlock_thread = Thread(target=action)
|
||||||
|
unlock_thread.start()
|
||||||
|
self.unlock_button.connect("clicked", lambda button: unlock_button_clicked())
|
||||||
|
# set disabled
|
||||||
|
self.unlock_button.set_sensitive(False)
|
||||||
|
self.action_preferences_group.add(self.unlock_button)
|
||||||
|
|
||||||
|
self.logout_button = Gtk.Button()
|
||||||
|
self.logout_button.set_label("Logout")
|
||||||
|
self.logout_button.set_margin_top(10)
|
||||||
|
self.logout_button.connect("clicked", lambda button: goldwarden.purge())
|
||||||
|
self.logout_button.get_style_context().add_class("destructive-action")
|
||||||
|
self.action_preferences_group.add(self.logout_button)
|
||||||
|
|
||||||
|
self.wiki_button = Gtk.LinkButton(uri="https://github.com/quexten/goldwarden/wiki/Flatpak-Configuration")
|
||||||
|
self.wiki_button.set_label("Help & Wiki")
|
||||||
|
self.wiki_button.set_margin_top(10)
|
||||||
|
self.action_preferences_group.add(self.wiki_button)
|
||||||
|
|
||||||
self.preferences_group = Adw.PreferencesGroup()
|
self.preferences_group = Adw.PreferencesGroup()
|
||||||
self.preferences_group.set_title("Services")
|
self.preferences_group.set_title("Services")
|
||||||
self.preferences_page.add(self.preferences_group)
|
self.preferences_page.add(self.preferences_group)
|
||||||
|
|
@ -127,57 +178,6 @@ class SettingsWinvdow(Gtk.ApplicationWindow):
|
||||||
self.notes_row.set_subtitle("0")
|
self.notes_row.set_subtitle("0")
|
||||||
self.notes_row.set_icon_name("emblem-documents-symbolic")
|
self.notes_row.set_icon_name("emblem-documents-symbolic")
|
||||||
self.vault_status_preferences_group.add(self.notes_row)
|
self.vault_status_preferences_group.add(self.notes_row)
|
||||||
|
|
||||||
self.action_preferences_group = Adw.PreferencesGroup()
|
|
||||||
self.action_preferences_group.set_title("Actions")
|
|
||||||
self.preferences_page.add(self.action_preferences_group)
|
|
||||||
|
|
||||||
self.autotype_button = Gtk.Button()
|
|
||||||
self.autotype_button.set_label("Autotype")
|
|
||||||
self.autotype_button.set_margin_top(10)
|
|
||||||
self.autotype_button.connect("clicked", lambda button: subprocess.Popen(["python3", "/app/bin/autofill.py"], start_new_session=True))
|
|
||||||
self.autotype_button.get_style_context().add_class("suggested-action")
|
|
||||||
self.action_preferences_group.add(self.autotype_button)
|
|
||||||
|
|
||||||
self.login_button = Gtk.Button()
|
|
||||||
self.login_button.set_label("Login")
|
|
||||||
self.login_button.connect("clicked", lambda button: show_login())
|
|
||||||
self.login_button.set_sensitive(False)
|
|
||||||
self.login_button.set_margin_top(10)
|
|
||||||
self.login_button.get_style_context().add_class("suggested-action")
|
|
||||||
self.action_preferences_group.add(self.login_button)
|
|
||||||
|
|
||||||
self.set_pin_button = Gtk.Button()
|
|
||||||
self.set_pin_button.set_label("Set Pin")
|
|
||||||
self.set_pin_button.connect("clicked", lambda button: set_pin())
|
|
||||||
self.set_pin_button.set_margin_top(10)
|
|
||||||
self.set_pin_button.set_sensitive(False)
|
|
||||||
self.set_pin_button.get_style_context().add_class("suggested-action")
|
|
||||||
self.action_preferences_group.add(self.set_pin_button)
|
|
||||||
|
|
||||||
self.unlock_button = Gtk.Button()
|
|
||||||
self.unlock_button.set_label("Unlock")
|
|
||||||
self.unlock_button.set_margin_top(10)
|
|
||||||
def unlock_button_clicked():
|
|
||||||
action = goldwarden.unlock if self.unlock_button.get_label() == "Unlock" else goldwarden.lock
|
|
||||||
unlock_thread = Thread(target=action)
|
|
||||||
unlock_thread.start()
|
|
||||||
self.unlock_button.connect("clicked", lambda button: unlock_button_clicked())
|
|
||||||
# set disabled
|
|
||||||
self.unlock_button.set_sensitive(False)
|
|
||||||
self.action_preferences_group.add(self.unlock_button)
|
|
||||||
|
|
||||||
self.logout_button = Gtk.Button()
|
|
||||||
self.logout_button.set_label("Logout")
|
|
||||||
self.logout_button.set_margin_top(10)
|
|
||||||
self.logout_button.connect("clicked", lambda button: goldwarden.purge())
|
|
||||||
self.logout_button.get_style_context().add_class("destructive-action")
|
|
||||||
self.action_preferences_group.add(self.logout_button)
|
|
||||||
|
|
||||||
self.wiki_button = Gtk.LinkButton(uri="https://github.com/quexten/goldwarden/wiki/Flatpak-Configuration")
|
|
||||||
self.wiki_button.set_label("Help & Wiki")
|
|
||||||
self.wiki_button.set_margin_top(10)
|
|
||||||
self.action_preferences_group.add(self.wiki_button)
|
|
||||||
|
|
||||||
def update_labels():
|
def update_labels():
|
||||||
GLib.timeout_add(1000, update_labels)
|
GLib.timeout_add(1000, update_labels)
|
||||||
|
|
@ -271,21 +271,10 @@ def show_login():
|
||||||
|
|
||||||
dialog.get_content_area().append(preference_group)
|
dialog.get_content_area().append(preference_group)
|
||||||
|
|
||||||
api_url_entry = Adw.EntryRow()
|
url_entry = Adw.EntryRow()
|
||||||
api_url_entry.set_title("API Url")
|
url_entry.set_title("Base Url")
|
||||||
# set value
|
url_entry.set_text("https://vault.bitwarden.com/")
|
||||||
api_url_entry.set_text("https://vault.bitwarden.com/api")
|
preference_group.add(url_entry)
|
||||||
preference_group.add(api_url_entry)
|
|
||||||
|
|
||||||
identity_url_entry = Adw.EntryRow()
|
|
||||||
identity_url_entry.set_title("Identity Url")
|
|
||||||
identity_url_entry.set_text("https://vault.bitwarden.com/identity")
|
|
||||||
preference_group.add(identity_url_entry)
|
|
||||||
|
|
||||||
notification_url_entry = Adw.EntryRow()
|
|
||||||
notification_url_entry.set_title("Notification URL")
|
|
||||||
notification_url_entry.set_text("https://notifications.bitwarden.com/")
|
|
||||||
preference_group.add(notification_url_entry)
|
|
||||||
|
|
||||||
auth_preference_group = Adw.PreferencesGroup()
|
auth_preference_group = Adw.PreferencesGroup()
|
||||||
auth_preference_group.set_title("Authentication")
|
auth_preference_group.set_title("Authentication")
|
||||||
|
|
@ -310,9 +299,7 @@ def show_login():
|
||||||
def on_save(res):
|
def on_save(res):
|
||||||
if res != Gtk.ResponseType.OK:
|
if res != Gtk.ResponseType.OK:
|
||||||
return
|
return
|
||||||
goldwarden.set_api_url(api_url_entry.get_text())
|
goldwarden.set_url(url_entry.get_text())
|
||||||
goldwarden.set_identity_url(identity_url_entry.get_text())
|
|
||||||
goldwarden.set_notification_url(notification_url_entry.get_text())
|
|
||||||
goldwarden.set_client_id(client_id_entry.get_text())
|
goldwarden.set_client_id(client_id_entry.get_text())
|
||||||
goldwarden.set_client_secret(client_secret_entry.get_text())
|
goldwarden.set_client_secret(client_secret_entry.get_text())
|
||||||
def login():
|
def login():
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue