From 91612b9d26129a9152a1e1c08602e5d758063255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 15 Mar 2024 15:29:44 +0100 Subject: [PATCH 1/3] Fix error checking --- browserbiometrics/main.go | 40 +++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/browserbiometrics/main.go b/browserbiometrics/main.go index 0abf918..b65b8d4 100644 --- a/browserbiometrics/main.go +++ b/browserbiometrics/main.go @@ -112,10 +112,22 @@ func detectAndInstallBrowsers(startPath string) error { fmt.Printf("Found mozilla-like browser: %s\n", path) fmt.Println("Removing old manifest and proxy script") - os.Chown(path+"/com.8bit.bitwarden.json", 7, 7) - os.Remove(path + "/com.8bit.bitwarden.json") - os.Chown(path+"/goldwarden-proxy.sh", 7, 7) - os.Remove(path + "/goldwarden-proxy.sh") + err = os.Chown(path+"/com.8bit.bitwarden.json", 7, 7) + if err != nil { + return err + } + err = os.Remove(path + "/com.8bit.bitwarden.json") + if err != nil { + return err + } + err = os.Chown(path+"/goldwarden-proxy.sh", 7, 7) + if err != nil { + return err + } + err = os.Remove(path + "/goldwarden-proxy.sh") + if err != nil { + return err + } fmt.Println("Writing new manifest") manifest := strings.Replace(templateMozilla, "PATH", path+"/goldwarden-proxy.sh", 1) @@ -133,10 +145,22 @@ func detectAndInstallBrowsers(startPath string) error { fmt.Printf("Found chrome-like browser: %s\n", path) fmt.Println("Removing old manifest and proxy script") - os.Chown(path+"/com.8bit.bitwarden.json", 7, 7) - os.Remove(path + "/com.8bit.bitwarden.json") - os.Chown(path+"/goldwarden-proxy.sh", 7, 7) - os.Remove(path + "/goldwarden-proxy.sh") + err = os.Chown(path+"/com.8bit.bitwarden.json", 7, 7) + if err != nil { + return err + } + err = os.Remove(path + "/com.8bit.bitwarden.json") + if err != nil { + return err + } + err = os.Chown(path+"/goldwarden-proxy.sh", 7, 7) + if err != nil { + return err + } + err = os.Remove(path + "/goldwarden-proxy.sh") + if err != nil { + return err + } fmt.Println("Writing new manifest") manifest := strings.Replace(templateChrome, "PATH", path+"/goldwarden-proxy.sh", 1) From c134a0e61d51079c44865f68ab65cfb3aea6f8f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 15 Mar 2024 15:29:55 +0100 Subject: [PATCH 2/3] Replace @PATH@, cleanup formatting a bit This makes it easier to replace the path to the script in NixOS --- browserbiometrics/main.go | 4 ++-- browserbiometrics/manifests.go | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/browserbiometrics/main.go b/browserbiometrics/main.go index b65b8d4..070f300 100644 --- a/browserbiometrics/main.go +++ b/browserbiometrics/main.go @@ -130,7 +130,7 @@ func detectAndInstallBrowsers(startPath string) error { } fmt.Println("Writing new manifest") - manifest := strings.Replace(templateMozilla, "PATH", path+"/goldwarden-proxy.sh", 1) + manifest := strings.Replace(templateMozilla, "@PATH@", path+"/goldwarden-proxy.sh", 1) err = os.WriteFile(path+"/com.8bit.bitwarden.json", []byte(manifest), 0444) if err != nil { return err @@ -163,7 +163,7 @@ func detectAndInstallBrowsers(startPath string) error { } fmt.Println("Writing new manifest") - manifest := strings.Replace(templateChrome, "PATH", path+"/goldwarden-proxy.sh", 1) + manifest := strings.Replace(templateChrome, "@PATH@", path+"/goldwarden-proxy.sh", 1) err = os.WriteFile(path+"/com.8bit.bitwarden.json", []byte(manifest), 0444) if err != nil { return err diff --git a/browserbiometrics/manifests.go b/browserbiometrics/manifests.go index 5b54a70..94ee192 100644 --- a/browserbiometrics/manifests.go +++ b/browserbiometrics/manifests.go @@ -1,26 +1,26 @@ package browserbiometrics const templateMozilla = `{ - "name": "com.8bit.bitwarden", - "description": "Bitwarden desktop <-> browser bridge", - "path": "PATH", - "type": "stdio", - "allowed_extensions": [ - "{446900e4-71c2-419f-a6a7-df9c091e268b}" - ] + "name": "com.8bit.bitwarden", + "description": "Bitwarden desktop <-> browser bridge", + "path": "@PATH@", + "type": "stdio", + "allowed_extensions": [ + "{446900e4-71c2-419f-a6a7-df9c091e268b}" + ] }` const templateChrome = `{ "name": "com.8bit.bitwarden", "description": "Bitwarden desktop <-> browser bridge", - "path": "PATH", + "path": "@PATH@", "type": "stdio", "allowed_origins": [ - "chrome-extension://nngceckbapebfimnlniiiahkandclblb/", - "chrome-extension://jbkfoedolllekgbhcbcoahefnbanhhlh/", - "chrome-extension://ccnckbpmaceehanjmeomladnmlffdjgn/" + "chrome-extension://nngceckbapebfimnlniiiahkandclblb/", + "chrome-extension://jbkfoedolllekgbhcbcoahefnbanhhlh/", + "chrome-extension://ccnckbpmaceehanjmeomladnmlffdjgn/" ] - }` +}` const proxyScript = `#!/usr/bin/env bash From 86d4f907fba241fd66d0fb3c109c0281a9766bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 15 Mar 2024 15:38:41 +0100 Subject: [PATCH 3/3] Use go's embed to have access to the plain files This makes it pretty easy for distros to install the files already to the correct positions --- .../chrome-com.8bit.bitwarden.json | 11 ++++++ browserbiometrics/goldwarden-proxy.sh | 9 +++++ browserbiometrics/main.go | 10 ++++++ browserbiometrics/manifests.go | 34 ------------------- .../mozilla-com.8bit.bitwarden.json | 9 +++++ cmd/goldwarden.service | 9 +++++ cmd/setup_linux.go | 14 +++----- 7 files changed, 52 insertions(+), 44 deletions(-) create mode 100644 browserbiometrics/chrome-com.8bit.bitwarden.json create mode 100644 browserbiometrics/goldwarden-proxy.sh delete mode 100644 browserbiometrics/manifests.go create mode 100644 browserbiometrics/mozilla-com.8bit.bitwarden.json create mode 100644 cmd/goldwarden.service diff --git a/browserbiometrics/chrome-com.8bit.bitwarden.json b/browserbiometrics/chrome-com.8bit.bitwarden.json new file mode 100644 index 0000000..7564212 --- /dev/null +++ b/browserbiometrics/chrome-com.8bit.bitwarden.json @@ -0,0 +1,11 @@ +{ + "name": "com.8bit.bitwarden", + "description": "Bitwarden desktop <-> browser bridge", + "path": "@PATH@", + "type": "stdio", + "allowed_origins": [ + "chrome-extension://nngceckbapebfimnlniiiahkandclblb/", + "chrome-extension://jbkfoedolllekgbhcbcoahefnbanhhlh/", + "chrome-extension://ccnckbpmaceehanjmeomladnmlffdjgn/" + ] +} diff --git a/browserbiometrics/goldwarden-proxy.sh b/browserbiometrics/goldwarden-proxy.sh new file mode 100644 index 0000000..e81775d --- /dev/null +++ b/browserbiometrics/goldwarden-proxy.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +# Check if the "com.quexten.Goldwarden" Flatpak is installed +if flatpak list | grep -q "com.quexten.Goldwarden"; then + flatpak run --command=goldwarden com.quexten.Goldwarden "$@" +else + # If not installed, attempt to run the local version + goldwarden "$@" +fi diff --git a/browserbiometrics/main.go b/browserbiometrics/main.go index 070f300..93b18ea 100644 --- a/browserbiometrics/main.go +++ b/browserbiometrics/main.go @@ -1,6 +1,7 @@ package browserbiometrics import ( + _ "embed" "fmt" "os" "path/filepath" @@ -10,6 +11,15 @@ import ( "github.com/quexten/goldwarden/browserbiometrics/logging" ) +//go:embed mozilla-com.8bit.bitwarden.json +var templateMozilla string + +//go:embed chrome-com.8bit.bitwarden.json +var templateChrome string + +//go:embed goldwarden-proxy.sh +var proxyScript string + var chromiumPaths = []string{ "~/.config/google-chrome/", "~/.config/google-chrome-beta/", diff --git a/browserbiometrics/manifests.go b/browserbiometrics/manifests.go deleted file mode 100644 index 94ee192..0000000 --- a/browserbiometrics/manifests.go +++ /dev/null @@ -1,34 +0,0 @@ -package browserbiometrics - -const templateMozilla = `{ - "name": "com.8bit.bitwarden", - "description": "Bitwarden desktop <-> browser bridge", - "path": "@PATH@", - "type": "stdio", - "allowed_extensions": [ - "{446900e4-71c2-419f-a6a7-df9c091e268b}" - ] -}` - -const templateChrome = `{ - "name": "com.8bit.bitwarden", - "description": "Bitwarden desktop <-> browser bridge", - "path": "@PATH@", - "type": "stdio", - "allowed_origins": [ - "chrome-extension://nngceckbapebfimnlniiiahkandclblb/", - "chrome-extension://jbkfoedolllekgbhcbcoahefnbanhhlh/", - "chrome-extension://ccnckbpmaceehanjmeomladnmlffdjgn/" - ] -}` - -const proxyScript = `#!/usr/bin/env bash - -# Check if the "com.quexten.Goldwarden" Flatpak is installed -if flatpak list | grep -q "com.quexten.Goldwarden"; then - flatpak run --command=goldwarden com.quexten.Goldwarden "$@" -else - # If not installed, attempt to run the local version - goldwarden "$@" -fi -` diff --git a/browserbiometrics/mozilla-com.8bit.bitwarden.json b/browserbiometrics/mozilla-com.8bit.bitwarden.json new file mode 100644 index 0000000..8d6c356 --- /dev/null +++ b/browserbiometrics/mozilla-com.8bit.bitwarden.json @@ -0,0 +1,9 @@ +{ + "name": "com.8bit.bitwarden", + "description": "Bitwarden desktop <-> browser bridge", + "path": "@PATH@", + "type": "stdio", + "allowed_extensions": [ + "{446900e4-71c2-419f-a6a7-df9c091e268b}" + ] +} diff --git a/cmd/goldwarden.service b/cmd/goldwarden.service new file mode 100644 index 0000000..b59e93e --- /dev/null +++ b/cmd/goldwarden.service @@ -0,0 +1,9 @@ +[Unit] +Description="Goldwarden daemon" +After=graphical-session.target + +[Service] +ExecStart=@BINARY_PATH@ daemonize + +[Install] +WantedBy=graphical-session.target diff --git a/cmd/setup_linux.go b/cmd/setup_linux.go index 1407b04..a45a6ec 100644 --- a/cmd/setup_linux.go +++ b/cmd/setup_linux.go @@ -3,6 +3,7 @@ package cmd import ( + _ "embed" "fmt" "log" "os" @@ -81,15 +82,8 @@ var polkitCmd = &cobra.Command{ }, } -const SYSTEMD_SERVICE = `[Unit] -Description="Goldwarden daemon" -After=graphical-session.target - -[Service] -ExecStart=BINARY_PATH daemonize - -[Install] -WantedBy=graphical-session.target` +//go:embed goldwarden.service +var systemdService string func setupSystemd() { if isRoot() { @@ -107,7 +101,7 @@ func setupSystemd() { panic(err) } - file.WriteString(strings.ReplaceAll(SYSTEMD_SERVICE, "BINARY_PATH", path)) + file.WriteString(strings.ReplaceAll(systemdService, "@BINARY_PATH@", path)) file.Close() userDirectory := os.Getenv("HOME")