diff --git a/agent/unixsocketagent.go b/agent/unixsocketagent.go index 149f1a5..85d2325 100644 --- a/agent/unixsocketagent.go +++ b/agent/unixsocketagent.go @@ -309,6 +309,22 @@ type AgentState struct { func StartUnixAgent(path string, runtimeConfig config.RuntimeConfig) error { ctx := context.Background() + home, _ := os.UserHomeDir() + _, err := os.Stat("/.flatpak-info") + isFlatpak := err == nil + if runtimeConfig.GoldwardenSocketPath == "" { + runtimeConfig.GoldwardenSocketPath = home + "/.goldwarden.sock" + if isFlatpak { + runtimeConfig.GoldwardenSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock" + } + } + if runtimeConfig.SSHAgentSocketPath == "" { + runtimeConfig.SSHAgentSocketPath = home + "/.ssh-agent-socket" + if isFlatpak { + runtimeConfig.SSHAgentSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock" + } + } + var keyring crypto.Keyring if runtimeConfig.UseMemguard { keyring = crypto.NewMemguardKeyring(nil) diff --git a/browserbiometrics/main.go b/browserbiometrics/main.go index bc65d2e..384c8f8 100644 --- a/browserbiometrics/main.go +++ b/browserbiometrics/main.go @@ -111,16 +111,20 @@ func detectAndInstallBrowsers(startPath string) error { if info.IsDir() && info.Name() == "native-messaging-hosts" { 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") + fmt.Println("Writing new manifest") 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 } + + fmt.Println("Writing new proxy script") err = os.WriteFile(path+"/goldwarden-proxy.sh", []byte(proxyScript), 0755) if err != nil { return err @@ -128,16 +132,20 @@ func detectAndInstallBrowsers(startPath string) error { } else if info.IsDir() && info.Name() == "NativeMessagingHosts" { 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") + fmt.Println("Writing new manifest") 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 } + + fmt.Println("Writing new proxy script") err = os.WriteFile(path+"/goldwarden-proxy.sh", []byte(proxyScript), 0755) if err != nil { return err diff --git a/browserbiometrics/protocol.go b/browserbiometrics/protocol.go index cb75359..8eef4d2 100644 --- a/browserbiometrics/protocol.go +++ b/browserbiometrics/protocol.go @@ -105,7 +105,26 @@ func handlePayloadMessage(msg PayloadMessage, appID string) { case "biometricUnlock": logging.Debugf("Biometric unlock requested") // logging.Debugf("Biometrics authorized: %t", isAuthorized) + + home, err := os.UserHomeDir() + if err != nil { + panic(err) + } + + if runtimeConfig.GoldwardenSocketPath == "" { + if _, err := os.Stat(home + "/.goldwarden.sock"); err == nil { + runtimeConfig.GoldwardenSocketPath = home + "/.goldwarden.sock" + } else if _, err := os.Stat(home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock"); err == nil { + runtimeConfig.GoldwardenSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock" + } + + if _, err = os.Stat("/.flatpak-info"); err == nil { + runtimeConfig.GoldwardenSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock" + } + } + logging.Debugf("Connecting to agent at path %s", runtimeConfig.GoldwardenSocketPath) + result, err := client.NewUnixSocketClient(runtimeConfig).SendToAgent(messages.GetBiometricsKeyRequest{}) if err != nil { logging.Errorf("Unable to send message to agent: %s", err.Error()) diff --git a/client/unixsocketclient.go b/client/unixsocketclient.go index b66571b..7ebc974 100644 --- a/client/unixsocketclient.go +++ b/client/unixsocketclient.go @@ -4,6 +4,7 @@ import ( "encoding/json" "io" "net" + "os" "github.com/quexten/goldwarden/agent/config" "github.com/quexten/goldwarden/ipc/messages" @@ -52,6 +53,26 @@ func (client UnixSocketClient) SendToAgent(request interface{}) (interface{}, er } func (client UnixSocketClient) Connect() (UnixSocketConnection, error) { + runtimeConfig := client.runtimeConfig + home, err := os.UserHomeDir() + if err != nil { + panic(err) + } + if runtimeConfig.SSHAgentSocketPath == "" { + if _, err := os.Stat(home + "/.ssh-agent-socket"); err == nil { + runtimeConfig.SSHAgentSocketPath = home + "/.ssh-agent-socket" + } else if _, err := os.Stat(home + "/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock"); err == nil { + runtimeConfig.SSHAgentSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock" + } + } + if runtimeConfig.GoldwardenSocketPath == "" { + if _, err := os.Stat(home + "/.goldwarden.sock"); err == nil { + runtimeConfig.GoldwardenSocketPath = home + "/.goldwarden.sock" + } else if _, err := os.Stat(home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock"); err == nil { + runtimeConfig.GoldwardenSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock" + } + } + c, err := net.Dial("unix", client.runtimeConfig.GoldwardenSocketPath) if err != nil { return UnixSocketConnection{}, err diff --git a/main.go b/main.go index 2948a95..b46ffb6 100644 --- a/main.go +++ b/main.go @@ -36,33 +36,12 @@ func main() { ConfigDirectory: configPath, } - home, err := os.UserHomeDir() - if err != nil { - panic(err) - } - if runtimeConfig.SSHAgentSocketPath == "" { - if _, err := os.Stat(home + "/.ssh-agent-socket"); err == nil { - runtimeConfig.SSHAgentSocketPath = home + "/.ssh-agent-socket" - } else if _, err := os.Stat(home + "/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock"); err == nil { - runtimeConfig.SSHAgentSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock" - } - } - if runtimeConfig.GoldwardenSocketPath == "" { - if _, err := os.Stat(home + "/.goldwarden.sock"); err == nil { - runtimeConfig.GoldwardenSocketPath = home + "/.goldwarden.sock" - } else if _, err := os.Stat(home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock"); err == nil { - runtimeConfig.GoldwardenSocketPath = home + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock" - } - } - - _, err = os.Stat("/.flatpak-info") + _, err := os.Stat("/.flatpak-info") isFlatpak := err == nil if isFlatpak { userHome, _ := os.UserHomeDir() runtimeConfig.ConfigDirectory = userHome + "/.var/app/com.quexten.Goldwarden/config/goldwarden.json" runtimeConfig.ConfigDirectory = strings.ReplaceAll(runtimeConfig.ConfigDirectory, "~", userHome) - runtimeConfig.SSHAgentSocketPath = userHome + "/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock" - runtimeConfig.GoldwardenSocketPath = userHome + "/.var/app/com.quexten.Goldwarden/data/goldwarden.sock" } if len(os.Args) > 1 && (strings.Contains(os.Args[1], "com.8bit.bitwarden.json") || strings.Contains(os.Args[1], "chrome-extension://")) {