mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-19 05:31:10 +02:00
Although not used for any auth mounts right now, it seemed appropriate to add it for parity since internally it maps to the same endpoint.
188 lines
5.0 KiB
Go
188 lines
5.0 KiB
Go
package command
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/hashicorp/vault/api"
|
|
"github.com/mitchellh/cli"
|
|
"github.com/posener/complete"
|
|
)
|
|
|
|
var _ cli.Command = (*AuthTuneCommand)(nil)
|
|
var _ cli.CommandAutocomplete = (*AuthTuneCommand)(nil)
|
|
|
|
type AuthTuneCommand struct {
|
|
*BaseCommand
|
|
|
|
flagOptions map[string]string
|
|
flagDefaultLeaseTTL time.Duration
|
|
flagMaxLeaseTTL time.Duration
|
|
flagAuditNonHMACRequestKeys []string
|
|
flagAuditNonHMACResponseKeys []string
|
|
flagListingVisibility string
|
|
flagVersion int
|
|
}
|
|
|
|
func (c *AuthTuneCommand) Synopsis() string {
|
|
return "Tunes an auth method configuration"
|
|
}
|
|
|
|
func (c *AuthTuneCommand) Help() string {
|
|
helpText := `
|
|
Usage: vault auth tune [options] PATH
|
|
|
|
Tunes the configuration options for the auth method at the given PATH. The
|
|
argument corresponds to the PATH where the auth method is enabled, not the
|
|
TYPE!
|
|
|
|
Tune the default lease for the github auth method:
|
|
|
|
$ vault auth tune -default-lease-ttl=72h github/
|
|
|
|
` + c.Flags().Help()
|
|
|
|
return strings.TrimSpace(helpText)
|
|
}
|
|
|
|
func (c *AuthTuneCommand) Flags() *FlagSets {
|
|
set := c.flagSet(FlagSetHTTP)
|
|
|
|
f := set.NewFlagSet("Command Options")
|
|
|
|
f.StringMapVar(&StringMapVar{
|
|
Name: "options",
|
|
Target: &c.flagOptions,
|
|
Completion: complete.PredictAnything,
|
|
Usage: "Key-value pair provided as key=value for the mount options. " +
|
|
"This can be specified multiple times.",
|
|
})
|
|
|
|
f.DurationVar(&DurationVar{
|
|
Name: "default-lease-ttl",
|
|
Target: &c.flagDefaultLeaseTTL,
|
|
Default: 0,
|
|
EnvVar: "",
|
|
Completion: complete.PredictAnything,
|
|
Usage: "The default lease TTL for this auth method. If unspecified, this " +
|
|
"defaults to the Vault server's globally configured default lease TTL, " +
|
|
"or a previously configured value for the auth method.",
|
|
})
|
|
|
|
f.DurationVar(&DurationVar{
|
|
Name: "max-lease-ttl",
|
|
Target: &c.flagMaxLeaseTTL,
|
|
Default: 0,
|
|
EnvVar: "",
|
|
Completion: complete.PredictAnything,
|
|
Usage: "The maximum lease TTL for this auth method. If unspecified, this " +
|
|
"defaults to the Vault server's globally configured maximum lease TTL, " +
|
|
"or a previously configured value for the auth method.",
|
|
})
|
|
|
|
f.StringSliceVar(&StringSliceVar{
|
|
Name: flagNameAuditNonHMACRequestKeys,
|
|
Target: &c.flagAuditNonHMACRequestKeys,
|
|
Usage: "Comma-separated string or list of keys that will not be HMAC'd by audit" +
|
|
"devices in the request data object.",
|
|
})
|
|
|
|
f.StringSliceVar(&StringSliceVar{
|
|
Name: flagNameAuditNonHMACResponseKeys,
|
|
Target: &c.flagAuditNonHMACResponseKeys,
|
|
Usage: "Comma-separated string or list of keys that will not be HMAC'd by audit" +
|
|
"devices in the response data object.",
|
|
})
|
|
|
|
f.StringVar(&StringVar{
|
|
Name: flagNameListingVisibility,
|
|
Target: &c.flagListingVisibility,
|
|
Usage: "Determines the visibility of the mount in the UI-specific listing endpoint.",
|
|
})
|
|
|
|
f.IntVar(&IntVar{
|
|
Name: "version",
|
|
Target: &c.flagVersion,
|
|
Default: 0,
|
|
Usage: "Select the version of the auth method to run. Not supported by all auth methods.",
|
|
})
|
|
|
|
return set
|
|
}
|
|
|
|
func (c *AuthTuneCommand) AutocompleteArgs() complete.Predictor {
|
|
return c.PredictVaultAuths()
|
|
}
|
|
|
|
func (c *AuthTuneCommand) AutocompleteFlags() complete.Flags {
|
|
return c.Flags().Completions()
|
|
}
|
|
|
|
func (c *AuthTuneCommand) Run(args []string) int {
|
|
f := c.Flags()
|
|
|
|
if err := f.Parse(args); err != nil {
|
|
c.UI.Error(err.Error())
|
|
return 1
|
|
}
|
|
|
|
args = f.Args()
|
|
switch {
|
|
case len(args) < 1:
|
|
c.UI.Error(fmt.Sprintf("Not enough arguments (expected 1, got %d)", len(args)))
|
|
return 1
|
|
case len(args) > 1:
|
|
c.UI.Error(fmt.Sprintf("Too many arguments (expected 1, got %d)", len(args)))
|
|
return 1
|
|
}
|
|
|
|
client, err := c.Client()
|
|
if err != nil {
|
|
c.UI.Error(err.Error())
|
|
return 2
|
|
}
|
|
|
|
if c.flagVersion > 0 {
|
|
if c.flagOptions == nil {
|
|
c.flagOptions = make(map[string]string)
|
|
}
|
|
c.flagOptions["version"] = strconv.Itoa(c.flagVersion)
|
|
}
|
|
|
|
mountConfigInput := api.MountConfigInput{
|
|
Options: c.flagOptions,
|
|
DefaultLeaseTTL: ttlToAPI(c.flagDefaultLeaseTTL),
|
|
MaxLeaseTTL: ttlToAPI(c.flagMaxLeaseTTL),
|
|
}
|
|
|
|
// Set these values only if they are provided in the CLI
|
|
f.Visit(func(fl *flag.Flag) {
|
|
if fl.Name == flagNameAuditNonHMACRequestKeys {
|
|
mountConfigInput.AuditNonHMACRequestKeys = c.flagAuditNonHMACRequestKeys
|
|
}
|
|
|
|
if fl.Name == flagNameAuditNonHMACResponseKeys {
|
|
mountConfigInput.AuditNonHMACResponseKeys = c.flagAuditNonHMACResponseKeys
|
|
}
|
|
|
|
if fl.Name == flagNameListingVisibility {
|
|
mountConfigInput.ListingVisibility = c.flagListingVisibility
|
|
}
|
|
})
|
|
|
|
// Append /auth (since that's where auths live) and a trailing slash to
|
|
// indicate it's a path in output
|
|
mountPath := ensureTrailingSlash(sanitizePath(args[0]))
|
|
|
|
if err := client.Sys().TuneMount("/auth/"+mountPath, mountConfigInput); err != nil {
|
|
c.UI.Error(fmt.Sprintf("Error tuning auth method %s: %s", mountPath, err))
|
|
return 2
|
|
}
|
|
|
|
c.UI.Output(fmt.Sprintf("Success! Tuned the auth method at: %s", mountPath))
|
|
return 0
|
|
}
|