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  }