go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers-sdk/v1/vault/cache/cached_vault.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package cache 5 6 import ( 7 "context" 8 9 "go.mondoo.com/cnquery/providers-sdk/v1/vault" 10 ) 11 12 type cachedVault struct { 13 secrets map[string]*vault.Secret 14 vault vault.Vault 15 } 16 17 func New(v vault.Vault) vault.Vault { 18 return &cachedVault{ 19 secrets: map[string]*vault.Secret{}, 20 vault: v, 21 } 22 } 23 24 func (c *cachedVault) About(ctx context.Context, e *vault.Empty) (*vault.VaultInfo, error) { 25 // return the info about the underlying vault. The cached vault is only an abstraction 26 return c.vault.About(ctx, e) 27 } 28 29 func (c *cachedVault) Get(ctx context.Context, id *vault.SecretID) (*vault.Secret, error) { 30 if s, ok := c.secrets[id.Key]; ok { 31 return s, nil 32 } 33 s, err := c.vault.Get(ctx, id) 34 if err != nil { 35 return nil, err 36 } 37 38 c.secrets[id.Key] = s 39 return s, nil 40 } 41 42 func (c *cachedVault) Set(ctx context.Context, s *vault.Secret) (*vault.SecretID, error) { 43 return c.vault.Set(ctx, s) 44 }