From 4f3939878ca1bf7f493504d1d7eb8b1091893a54 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 17 Jul 2023 20:58:36 +0200 Subject: [PATCH] Fix organizations not initalizing correctly --- agent/actions/vault.go | 11 ++++++++++- agent/bitwarden/crypto/keyring.go | 2 +- agent/bitwarden/sync.go | 10 +++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/agent/actions/vault.go b/agent/actions/vault.go index e05d4c1..bc67428 100644 --- a/agent/actions/vault.go +++ b/agent/actions/vault.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/quexten/goldwarden/agent/bitwarden" + "github.com/quexten/goldwarden/agent/bitwarden/crypto" "github.com/quexten/goldwarden/agent/config" "github.com/quexten/goldwarden/agent/sockets" "github.com/quexten/goldwarden/agent/systemauth" @@ -57,7 +58,15 @@ func handleUnlockVault(request ipc.IPCMessage, cfg *config.Config, vault *vault. ctx := context.Background() bitwarden.RefreshToken(ctx, cfg) token, err := cfg.GetToken() - err = bitwarden.DoFullSync(context.WithValue(ctx, bitwarden.AuthToken{}, token.AccessToken), vault, cfg, nil, true) + userSymmkey, err := cfg.GetUserSymmetricKey() + if err != nil { + fmt.Println(err) + } + safeUserSymmkey, err := crypto.SymmetricEncryptionKeyFromBytes(userSymmkey) + if err != nil { + fmt.Println(err) + } + err = bitwarden.DoFullSync(context.WithValue(ctx, bitwarden.AuthToken{}, token.AccessToken), vault, cfg, &safeUserSymmkey, true) if err != nil { fmt.Println(err) } diff --git a/agent/bitwarden/crypto/keyring.go b/agent/bitwarden/crypto/keyring.go index 6cebd68..34aae83 100644 --- a/agent/bitwarden/crypto/keyring.go +++ b/agent/bitwarden/crypto/keyring.go @@ -26,7 +26,7 @@ func (keyring *Keyring) Lock() { keyring.OrganizationKeys = nil } -func (keyring Keyring) GetSymmetricKeyForOrganization(uuid string) (SymmetricEncryptionKey, error) { +func (keyring *Keyring) GetSymmetricKeyForOrganization(uuid string) (SymmetricEncryptionKey, error) { if key, ok := keyring.OrganizationKeys[uuid]; ok { decryptedOrgKey, err := DecryptWithAsymmetric([]byte(key), keyring.AsymmetricEncyryptionKey) if err != nil { diff --git a/agent/bitwarden/sync.go b/agent/bitwarden/sync.go index 03c6a52..25455ab 100644 --- a/agent/bitwarden/sync.go +++ b/agent/bitwarden/sync.go @@ -41,12 +41,12 @@ func DoFullSync(ctx context.Context, vault *vault.Vault, config *config.Config, } } + var orgKeys map[string]string = make(map[string]string) + for _, org := range sync.Profile.Organizations { + orgId := org.Id.String() + orgKeys[orgId] = org.Key + } if userSymmetricKey != nil { - var orgKeys map[string]string = make(map[string]string) - for _, org := range sync.Profile.Organizations { - orgId := org.Id.String() - orgKeys[orgId] = org.Key - } crypto.InitKeyringFromUserSymmetricKey(vault.Keyring, *userSymmetricKey, sync.Profile.PrivateKey, orgKeys) }