diff --git a/agent/actions/actions.go b/agent/actions/actions.go index d3934b5..1d9e83c 100644 --- a/agent/actions/actions.go +++ b/agent/actions/actions.go @@ -1,6 +1,10 @@ package actions import ( + "context" + + "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" @@ -43,11 +47,33 @@ func ensureIsLoggedIn(action Action) Action { } } +func sync(ctx context.Context, vault *vault.Vault, cfg *config.Config) bool { + token, err := cfg.GetToken() + if err == nil { + if token.AccessToken != "" { + bitwarden.RefreshToken(ctx, cfg) + userSymmetricKey, err := cfg.GetUserSymmetricKey() + if err != nil { + return false + } + protectedUserSymetricKey, err := crypto.SymmetricEncryptionKeyFromBytes(userSymmetricKey) + + err = bitwarden.DoFullSync(context.WithValue(ctx, bitwarden.AuthToken{}, token.AccessToken), vault, cfg, &protectedUserSymetricKey, true) + if err != nil { + return false + } + } + } + return true +} + func ensureIsNotLocked(action Action) Action { return func(request ipc.IPCMessage, cfg *config.Config, vault *vault.Vault, ctx sockets.CallingContext) (interface{}, error) { if cfg.IsLocked() { err := cfg.TryUnlock(vault) - if err != nil { + ctx1 := context.Background() + success := sync(ctx1, vault, cfg) + if err != nil || !success { return ipc.IPCMessageFromPayload(ipc.ActionResponse{ Success: false, Message: err.Error(),