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 }