mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-11-03 03:58:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) HashiCorp, Inc.
 | 
						|
// SPDX-License-Identifier: MPL-2.0
 | 
						|
 | 
						|
package framework
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/hashicorp/vault/sdk/logical"
 | 
						|
)
 | 
						|
 | 
						|
// Secret is a type of secret that can be returned from a backend.
 | 
						|
type Secret struct {
 | 
						|
	// Type is the name of this secret type. This is used to setup the
 | 
						|
	// vault ID and to look up the proper secret structure when revocation/
 | 
						|
	// renewal happens. Once this is set this should not be changed.
 | 
						|
	//
 | 
						|
	// The format of this must match (case insensitive): ^a-Z0-9_$
 | 
						|
	Type string
 | 
						|
 | 
						|
	// Fields is the mapping of data fields and schema that comprise
 | 
						|
	// the structure of this secret.
 | 
						|
	Fields map[string]*FieldSchema
 | 
						|
 | 
						|
	// DefaultDuration is the default value for the duration of the lease for
 | 
						|
	// this secret. This can be manually overwritten with the result of
 | 
						|
	// Response().
 | 
						|
	//
 | 
						|
	// If these aren't set, Vault core will set a default lease period which
 | 
						|
	// may come from a mount tuning.
 | 
						|
	DefaultDuration time.Duration
 | 
						|
 | 
						|
	// Renew is the callback called to renew this secret. If Renew is
 | 
						|
	// not specified then renewable is set to false in the secret.
 | 
						|
	// See lease.go for helpers for this value.
 | 
						|
	Renew OperationFunc
 | 
						|
 | 
						|
	// Revoke is the callback called to revoke this secret. This is required.
 | 
						|
	Revoke OperationFunc
 | 
						|
}
 | 
						|
 | 
						|
func (s *Secret) Renewable() bool {
 | 
						|
	return s.Renew != nil
 | 
						|
}
 | 
						|
 | 
						|
func (s *Secret) Response(
 | 
						|
	data, internal map[string]interface{},
 | 
						|
) *logical.Response {
 | 
						|
	internalData := make(map[string]interface{})
 | 
						|
	for k, v := range internal {
 | 
						|
		internalData[k] = v
 | 
						|
	}
 | 
						|
	internalData["secret_type"] = s.Type
 | 
						|
 | 
						|
	return &logical.Response{
 | 
						|
		Secret: &logical.Secret{
 | 
						|
			LeaseOptions: logical.LeaseOptions{
 | 
						|
				TTL:       s.DefaultDuration,
 | 
						|
				Renewable: s.Renewable(),
 | 
						|
			},
 | 
						|
			InternalData: internalData,
 | 
						|
		},
 | 
						|
 | 
						|
		Data: data,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// HandleRenew is the request handler for renewing this secret.
 | 
						|
func (s *Secret) HandleRenew(ctx context.Context, req *logical.Request) (*logical.Response, error) {
 | 
						|
	if !s.Renewable() {
 | 
						|
		return nil, logical.ErrUnsupportedOperation
 | 
						|
	}
 | 
						|
 | 
						|
	data := &FieldData{
 | 
						|
		Raw:    req.Data,
 | 
						|
		Schema: s.Fields,
 | 
						|
	}
 | 
						|
 | 
						|
	return s.Renew(ctx, req, data)
 | 
						|
}
 | 
						|
 | 
						|
// HandleRevoke is the request handler for revoking this secret.
 | 
						|
func (s *Secret) HandleRevoke(ctx context.Context, req *logical.Request) (*logical.Response, error) {
 | 
						|
	data := &FieldData{
 | 
						|
		Raw:    req.Data,
 | 
						|
		Schema: s.Fields,
 | 
						|
	}
 | 
						|
 | 
						|
	if s.Revoke != nil {
 | 
						|
		return s.Revoke(ctx, req, data)
 | 
						|
	}
 | 
						|
 | 
						|
	return nil, logical.ErrUnsupportedOperation
 | 
						|
}
 |