116 lines
2.5 KiB
Go
116 lines
2.5 KiB
Go
|
package vault
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"sync"
|
||
|
"time"
|
||
|
|
||
|
log "github.com/hashicorp/go-hclog"
|
||
|
"github.com/hashicorp/vault/sdk/logical"
|
||
|
)
|
||
|
|
||
|
type RouterTestHandlerFunc func(context.Context, *logical.Request) (*logical.Response, error)
|
||
|
|
||
|
type NoopBackend struct {
|
||
|
sync.Mutex
|
||
|
|
||
|
Root []string
|
||
|
Login []string
|
||
|
Paths []string
|
||
|
Requests []*logical.Request
|
||
|
Response *logical.Response
|
||
|
RequestHandler RouterTestHandlerFunc
|
||
|
Invalidations []string
|
||
|
DefaultLeaseTTL time.Duration
|
||
|
MaxLeaseTTL time.Duration
|
||
|
BackendType logical.BackendType
|
||
|
}
|
||
|
|
||
|
func NoopBackendFactory(_ context.Context, _ *logical.BackendConfig) (logical.Backend, error) {
|
||
|
return &NoopBackend{}, nil
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) HandleRequest(ctx context.Context, req *logical.Request) (*logical.Response, error) {
|
||
|
if req.TokenEntry() != nil {
|
||
|
panic("got a non-nil TokenEntry")
|
||
|
}
|
||
|
|
||
|
var err error
|
||
|
resp := n.Response
|
||
|
if n.RequestHandler != nil {
|
||
|
resp, err = n.RequestHandler(ctx, req)
|
||
|
}
|
||
|
|
||
|
n.Lock()
|
||
|
defer n.Unlock()
|
||
|
|
||
|
requestCopy := *req
|
||
|
n.Paths = append(n.Paths, req.Path)
|
||
|
n.Requests = append(n.Requests, &requestCopy)
|
||
|
if req.Storage == nil {
|
||
|
return nil, fmt.Errorf("missing view")
|
||
|
}
|
||
|
|
||
|
if req.Path == "panic" {
|
||
|
panic("as you command")
|
||
|
}
|
||
|
|
||
|
return resp, err
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) HandleExistenceCheck(ctx context.Context, req *logical.Request) (bool, bool, error) {
|
||
|
return false, false, nil
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) SpecialPaths() *logical.Paths {
|
||
|
return &logical.Paths{
|
||
|
Root: n.Root,
|
||
|
Unauthenticated: n.Login,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) System() logical.SystemView {
|
||
|
defaultLeaseTTLVal := time.Hour * 24
|
||
|
maxLeaseTTLVal := time.Hour * 24 * 32
|
||
|
if n.DefaultLeaseTTL > 0 {
|
||
|
defaultLeaseTTLVal = n.DefaultLeaseTTL
|
||
|
}
|
||
|
|
||
|
if n.MaxLeaseTTL > 0 {
|
||
|
maxLeaseTTLVal = n.MaxLeaseTTL
|
||
|
}
|
||
|
|
||
|
return logical.StaticSystemView{
|
||
|
DefaultLeaseTTLVal: defaultLeaseTTLVal,
|
||
|
MaxLeaseTTLVal: maxLeaseTTLVal,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) Cleanup(ctx context.Context) {
|
||
|
// noop
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) InvalidateKey(ctx context.Context, k string) {
|
||
|
n.Invalidations = append(n.Invalidations, k)
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) Setup(ctx context.Context, config *logical.BackendConfig) error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) Logger() log.Logger {
|
||
|
return log.NewNullLogger()
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) Initialize(ctx context.Context) error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (n *NoopBackend) Type() logical.BackendType {
|
||
|
if n.BackendType == logical.TypeUnknown {
|
||
|
return logical.TypeLogical
|
||
|
}
|
||
|
return n.BackendType
|
||
|
}
|