Add RunCustom command to allow passing in a TokenHelper

This commit is contained in:
Jeff Mitchell
2018-03-16 11:31:00 -04:00
parent d7a46c631c
commit 130168c447
3 changed files with 175 additions and 82 deletions

View File

@@ -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 {

View File

@@ -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

View File

@@ -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)