You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/credential/vault/options.go

241 lines
6.5 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package vault
import "github.com/hashicorp/boundary/globals"
// getOpts - iterate the inbound Options and return a struct
func getOpts(opt ...Option) options {
opts := getDefaultOptions()
for _, o := range opt {
o(&opts)
}
return opts
}
// Option - how Options are passed as arguments.
type Option func(*options)
// options = how options are represented
type options struct {
withName string
withDescription string
withLimit int
withCACert []byte
withNamespace string
withTlsServerName string
withTlsSkipVerify bool
withWorkerFilter string
withClientCert *ClientCertificate
withMethod Method
withRequestBody []byte
withCredentialType globals.CredentialType
withOverrideUsernameAttribute string
withOverridePasswordAttribute string
withOverridePrivateKeyAttribute string
withOverridePrivateKeyPassphraseAttribute string
withMappingOverride MappingOverride
withKeyType string
withKeyBits uint32
withTtl string
withKeyId string
withCriticalOptions string
withExtensions string
withAdditionalValidPrincipals []string
}
func getDefaultOptions() options {
return options{}
}
// WithDescription provides an optional description.
func WithDescription(desc string) Option {
return func(o *options) {
o.withDescription = desc
}
}
// WithName provides an optional name.
func WithName(name string) Option {
return func(o *options) {
o.withName = name
}
}
// WithWorkerFilter provides an optional worker filter.
func WithWorkerFilter(filter string) Option {
return func(o *options) {
o.withWorkerFilter = filter
}
}
// WithLimit provides an option to provide a limit. Intentionally allowing
// negative integers. If WithLimit < 0, then unlimited results are
// returned. If WithLimit == 0, then default limits are used for results.
func WithLimit(l int) Option {
return func(o *options) {
o.withLimit = l
}
}
// WithCACert provides an optional PEM-encoded certificate
// to verify the Vault server's SSL certificate.
func WithCACert(cert []byte) Option {
return func(o *options) {
o.withCACert = cert
}
}
// WithNamespace provides an optional Vault namespace.
func WithNamespace(namespace string) Option {
return func(o *options) {
o.withNamespace = namespace
}
}
// WithTlsServerName provides an optional name to use as the SNI host when
// connecting to Vault via TLS.
func WithTlsServerName(name string) Option {
return func(o *options) {
o.withTlsServerName = name
}
}
// WithTlsSkipVerify provides an option to disable verification of TLS
// certificates when connection to Vault. Using this option is highly
// discouraged as it decreases the security of data transmissions to and
// from the Vault server.
func WithTlsSkipVerify(skipVerify bool) Option {
return func(o *options) {
o.withTlsSkipVerify = skipVerify
}
}
// WithClientCert provides an optional ClientCertificate to use for TLS
// authentication to a Vault server.
func WithClientCert(clientCert *ClientCertificate) Option {
return func(o *options) {
o.withClientCert = clientCert
}
}
// WithMethod provides an optional Method to use for communicating with
// Vault.
func WithMethod(m Method) Option {
return func(o *options) {
o.withMethod = m
}
}
// WithRequestBody provides an optional request body for sending to Vault
// when requesting credentials using HTTP Post.
func WithRequestBody(b []byte) Option {
return func(o *options) {
o.withRequestBody = b
}
}
// WithCredentialType provides an optional credential type to associate
// with a credential library.
func WithCredentialType(t globals.CredentialType) Option {
return func(o *options) {
o.withCredentialType = t
}
}
// WithOverrideUsernameAttribute provides the name of an attribute in the
// Data field of a Vault api.Secret that maps to a username value.
func WithOverrideUsernameAttribute(s string) Option {
return func(o *options) {
o.withOverrideUsernameAttribute = s
}
}
// WithOverridePasswordAttribute provides the name of an attribute in the
// Data field of a Vault api.Secret that maps to a password value.
func WithOverridePasswordAttribute(s string) Option {
return func(o *options) {
o.withOverridePasswordAttribute = s
}
}
// WithOverridePrivateKeyAttribute provides the name of an attribute in the
// Data field of a Vault api.Secret that maps to a private key value.
func WithOverridePrivateKeyAttribute(s string) Option {
return func(o *options) {
o.withOverridePrivateKeyAttribute = s
}
}
// WithOverridePrivateKeyPassphraseAttribute provides the name of an attribute in the
// Data field of a Vault api.Secret that maps to a passphrase value.
func WithOverridePrivateKeyPassphraseAttribute(s string) Option {
return func(o *options) {
o.withOverridePrivateKeyPassphraseAttribute = s
}
}
// WithMappingOverride provides an optional mapping override to use for
// mapping the Data fields of a Vault api.Secret to a credential.
func WithMappingOverride(m MappingOverride) Option {
return func(o *options) {
o.withMappingOverride = m
}
}
// WithKeyType provides an optional ssh private key type to use
// with a ssh certificate credential library. Must be rsa, ed25519, or ecdsa.
func WithKeyType(t string) Option {
return func(o *options) {
o.withKeyType = t
}
}
// WithKeyBits provides an optional number of bits used to generate an ssh private key.
func WithKeyBits(b uint32) Option {
return func(o *options) {
o.withKeyBits = b
}
}
// WithTtl provides an optional requested time to live for a generated ssh certificate.
func WithTtl(t string) Option {
return func(o *options) {
o.withTtl = t
}
}
// WithKeyId provides an optional key id for a created certificate.
func WithKeyId(i string) Option {
return func(o *options) {
o.withKeyId = i
}
}
// WithCriticalOptions provides an optional map of the critical options
// that the certificate should be signed for.
func WithCriticalOptions(s string) Option {
return func(o *options) {
o.withCriticalOptions = s
}
}
// WithExtensions provides a optional map of the extensions
// that the certificate should be signed for.
func WithExtensions(s string) Option {
return func(o *options) {
o.withExtensions = s
}
}
// WithAdditionalValidPrincipals adds principals to be signed for as
// "valid_principles" in addition to username.
func WithAdditionalValidPrincipals(p []string) Option {
return func(o *options) {
o.withAdditionalValidPrincipals = p
}
}