diff --git a/command/base.go b/command/base.go index 21c7518b76..a34e7b5f06 100644 --- a/command/base.go +++ b/command/base.go @@ -114,6 +114,11 @@ func (c *BaseCommand) Client() (*api.Client, error) { return client, nil } +// SetTokenHelper sets the token helper on the command. +func (c *BaseCommand) SetTokenHelper(th token.TokenHelper) { + c.tokenHelper = th +} + // TokenHelper returns the token helper attached to the command. func (c *BaseCommand) TokenHelper() (token.TokenHelper, error) { if c.tokenHelper != nil { diff --git a/command/commands.go b/command/commands.go index 366d162809..eb45c3dae1 100644 --- a/command/commands.go +++ b/command/commands.go @@ -184,7 +184,7 @@ func (c *DeprecatedCommand) warn() { var Commands map[string]cli.CommandFactory var DeprecatedCommands map[string]cli.CommandFactory -func initCommands(ui, serverCmdUi cli.Ui) { +func initCommands(ui, serverCmdUi cli.Ui, baseCmdTemplate *BaseCommand) { loginHandlers := map[string]LoginHandler{ "aws": &credAws.CLIHandler{}, "centrify": &credCentrify.CLIHandler{}, @@ -205,42 +205,48 @@ func initCommands(ui, serverCmdUi cli.Ui) { "audit": func() (cli.Command, error) { return &AuditCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "audit disable": func() (cli.Command, error) { return &AuditDisableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "audit enable": func() (cli.Command, error) { return &AuditEnableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "audit list": func() (cli.Command, error) { return &AuditListCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "auth tune": func() (cli.Command, error) { return &AuthTuneCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "auth": func() (cli.Command, error) { return &AuthCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, Handlers: loginHandlers, }, nil @@ -248,21 +254,24 @@ func initCommands(ui, serverCmdUi cli.Ui) { "auth disable": func() (cli.Command, error) { return &AuthDisableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "auth enable": func() (cli.Command, error) { return &AuthEnableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "auth help": func() (cli.Command, error) { return &AuthHelpCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, Handlers: loginHandlers, }, nil @@ -270,49 +279,56 @@ func initCommands(ui, serverCmdUi cli.Ui) { "auth list": func() (cli.Command, error) { return &AuthListCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "delete": func() (cli.Command, error) { return &DeleteCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "lease": func() (cli.Command, error) { return &LeaseCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "lease renew": func() (cli.Command, error) { return &LeaseRenewCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "lease revoke": func() (cli.Command, error) { return &LeaseRevokeCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "list": func() (cli.Command, error) { return &ListCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "login": func() (cli.Command, error) { return &LoginCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, Handlers: loginHandlers, }, nil @@ -320,168 +336,192 @@ func initCommands(ui, serverCmdUi cli.Ui) { "operator": func() (cli.Command, error) { return &OperatorCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator generate-root": func() (cli.Command, error) { return &OperatorGenerateRootCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator init": func() (cli.Command, error) { return &OperatorInitCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator key-status": func() (cli.Command, error) { return &OperatorKeyStatusCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator rekey": func() (cli.Command, error) { return &OperatorRekeyCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator rotate": func() (cli.Command, error) { return &OperatorRotateCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator seal": func() (cli.Command, error) { return &OperatorSealCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator step-down": func() (cli.Command, error) { return &OperatorStepDownCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "operator unseal": func() (cli.Command, error) { return &OperatorUnsealCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "path-help": func() (cli.Command, error) { return &PathHelpCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "policy": func() (cli.Command, error) { return &PolicyCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "policy delete": func() (cli.Command, error) { return &PolicyDeleteCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "policy fmt": func() (cli.Command, error) { return &PolicyFmtCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "policy list": func() (cli.Command, error) { return &PolicyListCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "policy read": func() (cli.Command, error) { return &PolicyReadCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "policy write": func() (cli.Command, error) { return &PolicyWriteCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "read": func() (cli.Command, error) { return &ReadCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "secrets": func() (cli.Command, error) { return &SecretsCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "secrets disable": func() (cli.Command, error) { return &SecretsDisableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "secrets enable": func() (cli.Command, error) { return &SecretsEnableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "secrets list": func() (cli.Command, error) { return &SecretsListCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "secrets move": func() (cli.Command, error) { return &SecretsMoveCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "secrets tune": func() (cli.Command, error) { return &SecretsTuneCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "server": func() (cli.Command, error) { return &ServerCommand{ BaseCommand: &BaseCommand{ - UI: serverCmdUi, + UI: serverCmdUi, + tokenHelper: baseCmdTemplate.tokenHelper, }, AuditBackends: auditBackends, CredentialBackends: credentialBackends, @@ -494,63 +534,72 @@ func initCommands(ui, serverCmdUi cli.Ui) { "ssh": func() (cli.Command, error) { return &SSHCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "status": func() (cli.Command, error) { return &StatusCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "token": func() (cli.Command, error) { return &TokenCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "token create": func() (cli.Command, error) { return &TokenCreateCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "token capabilities": func() (cli.Command, error) { return &TokenCapabilitiesCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "token lookup": func() (cli.Command, error) { return &TokenLookupCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "token renew": func() (cli.Command, error) { return &TokenRenewCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "token revoke": func() (cli.Command, error) { return &TokenRevokeCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "unwrap": func() (cli.Command, error) { return &UnwrapCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, @@ -558,14 +607,16 @@ func initCommands(ui, serverCmdUi cli.Ui) { return &VersionCommand{ VersionInfo: version.GetVersion(), BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, "write": func() (cli.Command, error) { return &WriteCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, nil }, @@ -579,10 +630,10 @@ func initCommands(ui, serverCmdUi cli.Ui) { return &DeprecatedCommand{ Old: "audit-disable", New: "audit disable", - UI: ui, Command: &AuditDisableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -595,7 +646,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &AuditEnableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -608,7 +660,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &AuditListCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -621,7 +674,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &AuthDisableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -634,7 +688,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &AuthEnableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -647,7 +702,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &TokenCapabilitiesCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -660,7 +716,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorGenerateRootCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -673,7 +730,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorInitCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -686,7 +744,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorKeyStatusCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -699,7 +758,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &LeaseRenewCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -712,7 +772,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &LeaseRevokeCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -725,7 +786,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &SecretsEnableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -738,7 +800,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &SecretsTuneCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -751,7 +814,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &SecretsListCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -764,7 +828,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &PoliciesDeprecatedCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -777,7 +842,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &PolicyDeleteCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -790,7 +856,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &PolicyWriteCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -803,7 +870,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorRekeyCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -816,7 +884,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &SecretsMoveCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -829,7 +898,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorRotateCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -842,7 +912,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorSealCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -855,7 +926,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorStepDownCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -868,7 +940,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &TokenCreateCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -881,7 +954,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &TokenLookupCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -894,7 +968,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &TokenRenewCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -907,7 +982,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &TokenRevokeCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -920,7 +996,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &SecretsDisableCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil @@ -933,7 +1010,8 @@ func initCommands(ui, serverCmdUi cli.Ui) { UI: ui, Command: &OperatorUnsealCommand{ BaseCommand: &BaseCommand{ - UI: ui, + UI: ui, + tokenHelper: baseCmdTemplate.tokenHelper, }, }, }, nil diff --git a/command/main.go b/command/main.go index 6ed2236dd3..b3412c1ba8 100644 --- a/command/main.go +++ b/command/main.go @@ -81,6 +81,16 @@ func setupEnv(args []string) []string { } func Run(args []string) int { + return RunCustom(args, nil) +} + +// RunCustom allows passing in a base command template to pass to other +// commands. Currenty, this is only used for setting a custom token helper. +func RunCustom(args []string, baseCmdTemplate *BaseCommand) int { + if baseCmdTemplate == nil { + baseCmdTemplate = &BaseCommand{} + } + args = setupEnv(args) // Don't use color if disabled @@ -129,7 +139,7 @@ func Run(args []string) int { } } - initCommands(ui, serverCmdUi) + initCommands(ui, serverCmdUi, baseCmdTemplate) // Calculate hidden commands from the deprecated ones hiddenCommands := make([]string, 0, len(DeprecatedCommands)+1)