From 1479d9f8fd10c07f34345216405e33451856d567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 15 Mar 2024 16:22:45 +0100 Subject: [PATCH] Improve overhaul error handling --- agent/actions/send.go | 3 +++ agent/actions/ssh.go | 3 +++ agent/bitwarden/passwordless.go | 8 +++++++- agent/bitwarden/websocket.go | 4 ++++ cmd/logins.go | 12 ++++++++++-- cmd/send.go | 7 ++++++- cmd/session.go | 3 +++ cmd/setup_linux.go | 5 ++++- cmd/ssh.go | 17 ++++++++++++++--- main.go | 6 ++++-- 10 files changed, 58 insertions(+), 10 deletions(-) diff --git a/agent/actions/send.go b/agent/actions/send.go index c3c1a6e..816f87b 100644 --- a/agent/actions/send.go +++ b/agent/actions/send.go @@ -20,6 +20,9 @@ func handleCreateSend(msg messages.IPCMessage, cfg *config.Config, vault *vault. ctx := context.WithValue(context.TODO(), bitwarden.AuthToken{}, token.AccessToken) url, err := bitwarden.CreateSend(ctx, cfg, vault, parsedMsg.Name, parsedMsg.Text) + if err != nil { + actionsLog.Warn(err.Error()) + } response, err = messages.IPCMessageFromPayload(messages.CreateSendResponse{ URL: url, diff --git a/agent/actions/ssh.go b/agent/actions/ssh.go index a3ae12a..c373e47 100644 --- a/agent/actions/ssh.go +++ b/agent/actions/ssh.go @@ -25,6 +25,9 @@ func handleAddSSH(msg messages.IPCMessage, cfg *config.Config, vault *vault.Vaul } token, err := cfg.GetToken() + if err != nil { + actionsLog.Warn(err.Error()) + } ctx := context.WithValue(context.TODO(), bitwarden.AuthToken{}, token.AccessToken) ciph, err := bitwarden.PostCipher(ctx, cipher, cfg) if err == nil { diff --git a/agent/bitwarden/passwordless.go b/agent/bitwarden/passwordless.go index 5029211..1f8b18f 100644 --- a/agent/bitwarden/passwordless.go +++ b/agent/bitwarden/passwordless.go @@ -69,11 +69,17 @@ func CreateAuthResponse(ctx context.Context, authRequest AuthRequestData, keyrin //} publicKey, err := base64.StdEncoding.DecodeString(authRequest.PublicKey) + if err != nil { + return AuthRequestResponseData{}, err + } requesterKey, err := crypto.MemoryAssymmetricEncryptionKeyFromBytes(publicKey) + if err != nil { + return AuthRequestResponseData{}, err + } encryptedUserSymmetricKey, err := crypto.EncryptWithAsymmetric(userSymmetricKey, requesterKey) if err != nil { - panic(err) + return AuthRequestResponseData{}, err } //encryptedMasterPasswordHash, err := crypto.EncryptWithAsymmetric(masterPasswordHash, requesterKey) //if err != nil { diff --git a/agent/bitwarden/websocket.go b/agent/bitwarden/websocket.go index 4978d37..40f7a7d 100644 --- a/agent/bitwarden/websocket.go +++ b/agent/bitwarden/websocket.go @@ -76,6 +76,10 @@ func connectToWebsocket(ctx context.Context, vault *vault.Vault, cfg *config.Con } token, err := cfg.GetToken() + if err != nil { + return err + } + var websocketURL = "wss://" + url.Host + url.Path + "/hub?access_token=" + token.AccessToken c, _, err := websocket.DefaultDialer.Dial(websocketURL, nil) if err != nil { diff --git a/cmd/logins.go b/cmd/logins.go index 9f96a86..142f327 100644 --- a/cmd/logins.go +++ b/cmd/logins.go @@ -26,7 +26,11 @@ var getLoginCmd = &cobra.Command{ Short: "Gets a login in your vault", Long: `Gets a login in your vault.`, Run: func(cmd *cobra.Command, args []string) { - loginIfRequired() + err := loginIfRequired() + if err != nil { + fmt.Println(err) + os.Exit(1) + } uuid, _ := cmd.Flags().GetString("uuid") name, _ := cmd.Flags().GetString("name") @@ -64,7 +68,11 @@ var listLoginsCmd = &cobra.Command{ Short: "Lists all logins in your vault", Long: `Lists all logins in your vault.`, Run: func(cmd *cobra.Command, args []string) { - loginIfRequired() + err := loginIfRequired() + if err != nil { + fmt.Println(err) + os.Exit(1) + } logins, err := ListLogins(commandClient) if err != nil { diff --git a/cmd/send.go b/cmd/send.go index 388a535..70673c2 100644 --- a/cmd/send.go +++ b/cmd/send.go @@ -21,7 +21,12 @@ var sendCreateCmd = &cobra.Command{ Short: "Uploads a Bitwarden send.", Long: `Uploads a Bitwarden send.`, Run: func(cmd *cobra.Command, args []string) { - loginIfRequired() + err := loginIfRequired() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + name, _ := cmd.Flags().GetString("name") text, _ := cmd.Flags().GetString("text") diff --git a/cmd/session.go b/cmd/session.go index 42daa1b..d2a69a2 100644 --- a/cmd/session.go +++ b/cmd/session.go @@ -64,6 +64,9 @@ var pinentry = &cobra.Command{ case messages.PinentryApprovalRequest: err = conn.WriteMessage(messages.PinentryApprovalResponse{Approved: text == "true"}) } + if err != nil { + panic(err) + } } }, } diff --git a/cmd/setup_linux.go b/cmd/setup_linux.go index 1407b04..bf10d00 100644 --- a/cmd/setup_linux.go +++ b/cmd/setup_linux.go @@ -107,7 +107,10 @@ func setupSystemd() { panic(err) } - file.WriteString(strings.ReplaceAll(SYSTEMD_SERVICE, "BINARY_PATH", path)) + _, err = file.WriteString(strings.ReplaceAll(SYSTEMD_SERVICE, "BINARY_PATH", path)) + if err != nil { + panic(err) + } file.Close() userDirectory := os.Getenv("HOME") diff --git a/cmd/ssh.go b/cmd/ssh.go index 3bb74c7..bf9ba0b 100644 --- a/cmd/ssh.go +++ b/cmd/ssh.go @@ -24,7 +24,11 @@ var sshAddCmd = &cobra.Command{ Long: `Runs a command with environment variables from your vault. The variables are stored as a secure note. Consult the documentation for more information.`, Run: func(cmd *cobra.Command, args []string) { - loginIfRequired() + err := loginIfRequired() + if err != nil { + fmt.Println(err) + os.Exit(1) + } name, _ := cmd.Flags().GetString("name") copyToClipboard, _ := cmd.Flags().GetBool("clipboard") @@ -43,7 +47,10 @@ var sshAddCmd = &cobra.Command{ fmt.Println(response.Digest) if copyToClipboard { - clipboard.WriteAll(string(response.Digest)) + err := clipboard.WriteAll(string(response.Digest)) + if err != nil { + panic(err) + } } break case messages.ActionResponse: @@ -58,7 +65,11 @@ var listSSHCmd = &cobra.Command{ Short: "Lists all SSH keys in your vault", Long: `Lists all SSH keys in your vault.`, Run: func(cmd *cobra.Command, args []string) { - loginIfRequired() + err := loginIfRequired() + if err != nil { + fmt.Println(err) + os.Exit(1) + } result, err := commandClient.SendToAgent(messages.GetSSHKeysRequest{}) if err != nil { diff --git a/main.go b/main.go index b46ffb6..6d34f7c 100644 --- a/main.go +++ b/main.go @@ -45,8 +45,10 @@ func main() { } if len(os.Args) > 1 && (strings.Contains(os.Args[1], "com.8bit.bitwarden.json") || strings.Contains(os.Args[1], "chrome-extension://")) { - browserbiometrics.Main(&runtimeConfig) - return + err = browserbiometrics.Main(&runtimeConfig) + if err != nil { + panic(err) + } } cmd.Execute(runtimeConfig)