From 0cd55f40523504abf6192930abfa93f80faa297b Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Sun, 18 Feb 2024 06:08:37 +0100 Subject: [PATCH] Attempt to fix socket path detection --- agent/unixsocketagent.go | 16 ++++++++++++++++ browserbiometrics/protocol.go | 19 +++++++++++++++++++ client/unixsocketclient.go | 21 +++++++++++++++++++++ main.go | 23 +---------------------- 4 files changed, 57 insertions(+), 22 deletions(-) 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/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://")) {