go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers-sdk/v1/vault/inmemory/inmemory.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package inmemory
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  
    10  	"go.mondoo.com/cnquery/providers-sdk/v1/vault"
    11  )
    12  
    13  type Option func(*inmemoryVault)
    14  
    15  func WithSecretMap(secrets map[string]*vault.Secret) Option {
    16  	return func(iv *inmemoryVault) {
    17  		iv.secrets = secrets
    18  	}
    19  }
    20  
    21  func New(opts ...Option) *inmemoryVault {
    22  	iv := &inmemoryVault{
    23  		secrets: map[string]*vault.Secret{},
    24  	}
    25  
    26  	for _, option := range opts {
    27  		option(iv)
    28  	}
    29  
    30  	return iv
    31  }
    32  
    33  type inmemoryVault struct {
    34  	secrets map[string]*vault.Secret
    35  }
    36  
    37  func (v *inmemoryVault) About(context.Context, *vault.Empty) (*vault.VaultInfo, error) {
    38  	return &vault.VaultInfo{Name: "In-Memory Vault"}, nil
    39  }
    40  
    41  func (v *inmemoryVault) Set(ctx context.Context, secret *vault.Secret) (*vault.SecretID, error) {
    42  	if secret == nil {
    43  		return nil, errors.New("secret is empty")
    44  	}
    45  
    46  	v.secrets[secret.Key] = secret
    47  	return &vault.SecretID{
    48  		Key: secret.Key,
    49  	}, nil
    50  }
    51  
    52  func (v *inmemoryVault) Get(ctx context.Context, id *vault.SecretID) (*vault.Secret, error) {
    53  	if id == nil {
    54  		return nil, errors.New("secret id is empty")
    55  	}
    56  
    57  	s, ok := v.secrets[id.Key]
    58  	if !ok {
    59  		return nil, vault.NotFoundError
    60  	}
    61  	return s, nil
    62  }