| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- /*
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package fake
- import (
- "context"
- vault "github.com/hashicorp/vault/api"
- util "github.com/external-secrets/external-secrets/pkg/provider/vault/util"
- )
- type LoginFn func(ctx context.Context, authMethod vault.AuthMethod) (*vault.Secret, error)
- type Auth struct {
- LoginFn LoginFn
- }
- func (f Auth) Login(ctx context.Context, authMethod vault.AuthMethod) (*vault.Secret, error) {
- return f.LoginFn(ctx, authMethod)
- }
- type ReadWithDataWithContextFn func(ctx context.Context, path string, data map[string][]string) (*vault.Secret, error)
- type ListWithContextFn func(ctx context.Context, path string) (*vault.Secret, error)
- type WriteWithContextFn func(ctx context.Context, path string, data map[string]interface{}) (*vault.Secret, error)
- type DeleteWithContextFn func(ctx context.Context, path string) (*vault.Secret, error)
- type Logical struct {
- ReadWithDataWithContextFn ReadWithDataWithContextFn
- ListWithContextFn ListWithContextFn
- WriteWithContextFn WriteWithContextFn
- DeleteWithContextFn DeleteWithContextFn
- }
- func (f Logical) DeleteWithContext(ctx context.Context, path string) (*vault.Secret, error) {
- return f.DeleteWithContextFn(ctx, path)
- }
- func NewDeleteWithContextFn(secret map[string]interface{}, err error) DeleteWithContextFn {
- return func(ctx context.Context, path string) (*vault.Secret, error) {
- vault := &vault.Secret{
- Data: secret,
- }
- return vault, err
- }
- }
- func NewReadWithContextFn(secret map[string]interface{}, err error) ReadWithDataWithContextFn {
- return func(ctx context.Context, path string, data map[string][]string) (*vault.Secret, error) {
- if secret == nil {
- return nil, err
- }
- vault := &vault.Secret{
- Data: secret,
- }
- return vault, err
- }
- }
- func NewReadMetadataWithContextFn(secret map[string]interface{}, err error) ReadWithDataWithContextFn {
- return func(ctx context.Context, path string, data map[string][]string) (*vault.Secret, error) {
- if secret == nil {
- return nil, err
- }
- metadata := make(map[string]interface{})
- metadata["custom_metadata"] = secret
- vault := &vault.Secret{
- Data: metadata,
- }
- return vault, err
- }
- }
- func NewWriteWithContextFn(secret map[string]interface{}, err error) WriteWithContextFn {
- return func(ctx context.Context, path string, data map[string]interface{}) (*vault.Secret, error) {
- vault := &vault.Secret{
- Data: secret,
- }
- return vault, err
- }
- }
- func WriteChangingReadContext(secret map[string]interface{}, l Logical) WriteWithContextFn {
- v := &vault.Secret{
- Data: secret,
- }
- return func(ctx context.Context, path string, data map[string]interface{}) (*vault.Secret, error) {
- l.ReadWithDataWithContextFn = func(ctx context.Context, path string, data map[string][]string) (*vault.Secret, error) {
- return v, nil
- }
- return v, nil
- }
- }
- func (f Logical) ReadWithDataWithContext(ctx context.Context, path string, data map[string][]string) (*vault.Secret, error) {
- return f.ReadWithDataWithContextFn(ctx, path, data)
- }
- func (f Logical) ListWithContext(ctx context.Context, path string) (*vault.Secret, error) {
- return f.ListWithContextFn(ctx, path)
- }
- func (f Logical) WriteWithContext(ctx context.Context, path string, data map[string]interface{}) (*vault.Secret, error) {
- return f.WriteWithContextFn(ctx, path, data)
- }
- type RevokeSelfWithContextFn func(ctx context.Context, token string) error
- type LookupSelfWithContextFn func(ctx context.Context) (*vault.Secret, error)
- type Token struct {
- RevokeSelfWithContextFn RevokeSelfWithContextFn
- LookupSelfWithContextFn LookupSelfWithContextFn
- }
- func (f Token) RevokeSelfWithContext(ctx context.Context, token string) error {
- return f.RevokeSelfWithContextFn(ctx, token)
- }
- func (f Token) LookupSelfWithContext(ctx context.Context) (*vault.Secret, error) {
- return f.LookupSelfWithContextFn(ctx)
- }
- type MockSetTokenFn func(v string)
- type MockTokenFn func() string
- type MockClearTokenFn func()
- type MockSetNamespaceFn func(namespace string)
- type MockAddHeaderFn func(key, value string)
- type VaultListResponse struct {
- Metadata *vault.Response
- Data *vault.Response
- }
- func NewAuthTokenFn() Token {
- return Token{nil, func(ctx context.Context) (*vault.Secret, error) {
- return &(vault.Secret{}), nil
- }}
- }
- func NewSetTokenFn(ofn ...func(v string)) MockSetTokenFn {
- return func(v string) {
- for _, fn := range ofn {
- fn(v)
- }
- }
- }
- func NewTokenFn(v string) MockTokenFn {
- return func() string {
- return v
- }
- }
- func NewClearTokenFn() MockClearTokenFn {
- return func() {}
- }
- func NewSetNamespaceFn() MockSetNamespaceFn {
- return func(namespace string) {}
- }
- func NewAddHeaderFn() MockAddHeaderFn {
- return func(key, value string) {}
- }
- type VaultClient struct {
- MockLogical Logical
- MockAuth Auth
- MockAuthToken Token
- MockSetToken MockSetTokenFn
- MockToken MockTokenFn
- MockClearToken MockClearTokenFn
- MockSetNamespace MockSetNamespaceFn
- MockAddHeader MockAddHeaderFn
- }
- func (c *VaultClient) Logical() Logical {
- return c.MockLogical
- }
- func NewVaultLogical() Logical {
- logical := Logical{
- ReadWithDataWithContextFn: func(ctx context.Context, path string, data map[string][]string) (*vault.Secret, error) {
- return nil, nil
- },
- ListWithContextFn: func(ctx context.Context, path string) (*vault.Secret, error) {
- return nil, nil
- },
- WriteWithContextFn: func(ctx context.Context, path string, data map[string]interface{}) (*vault.Secret, error) {
- return nil, nil
- },
- }
- return logical
- }
- func (c *VaultClient) Auth() Auth {
- return c.MockAuth
- }
- func NewVaultAuth() Auth {
- auth := Auth{
- LoginFn: func(ctx context.Context, authMethod vault.AuthMethod) (*vault.Secret, error) {
- return nil, nil
- },
- }
- return auth
- }
- func (c *VaultClient) AuthToken() Token {
- return c.MockAuthToken
- }
- func (c *VaultClient) SetToken(v string) {
- c.MockSetToken(v)
- }
- func (c *VaultClient) Token() string {
- return c.MockToken()
- }
- func (c *VaultClient) ClearToken() {
- c.MockClearToken()
- }
- func (c *VaultClient) SetNamespace(namespace string) {
- c.MockSetNamespace(namespace)
- }
- func (c *VaultClient) AddHeader(key, value string) {
- c.MockAddHeader(key, value)
- }
- func ClientWithLoginMock(c *vault.Config) (util.Client, error) {
- cl := VaultClient{
- MockAuthToken: NewAuthTokenFn(),
- MockSetToken: NewSetTokenFn(),
- MockToken: NewTokenFn(""),
- MockAuth: NewVaultAuth(),
- MockLogical: NewVaultLogical(),
- }
- auth := cl.Auth()
- token := cl.AuthToken()
- logical := cl.Logical()
- out := util.VClient{
- SetTokenFunc: cl.SetToken,
- TokenFunc: cl.Token,
- ClearTokenFunc: cl.ClearToken,
- AuthField: auth,
- AuthTokenField: token,
- LogicalField: logical,
- SetNamespaceFunc: cl.SetNamespace,
- AddHeaderFunc: cl.AddHeader,
- }
- return out, nil
- }
|