Move token helper out of meta

This commit is contained in:
Jeff Mitchell 2016-04-01 14:23:15 -04:00
parent 33326b30c3
commit 48da40964c
6 changed files with 56 additions and 36 deletions

View File

@ -35,7 +35,9 @@ import (
// parameter lets you set meta options for all commands.
func Commands(metaPtr *meta.Meta) map[string]cli.CommandFactory {
if metaPtr == nil {
metaPtr = new(meta.Meta)
metaPtr = &meta.Meta{
TokenHelper: command.DefaultTokenHelper,
}
}
if metaPtr.Ui == nil {

View File

@ -52,7 +52,7 @@ func (c *AuthCommand) Run(args []string) int {
args = flags.Args()
tokenHelper, err := c.TokenHelper()
tokenHelper, err := c.TokenHelper(&c.Meta)
if err != nil {
c.Ui.Error(fmt.Sprintf(
"Error initializing token helper: %s\n\n"+

View File

@ -28,6 +28,7 @@ func TestAuth_methods(t *testing.T) {
Meta: meta.Meta{
ClientToken: token,
Ui: ui,
TokenHelper: DefaultTokenHelper,
},
}
@ -55,7 +56,8 @@ func TestAuth_token(t *testing.T) {
ui := new(cli.MockUi)
c := &AuthCommand{
Meta: meta.Meta{
Ui: ui,
Ui: ui,
TokenHelper: DefaultTokenHelper,
},
}
@ -67,7 +69,7 @@ func TestAuth_token(t *testing.T) {
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
}
helper, err := c.TokenHelper()
helper, err := c.TokenHelper(&c.Meta)
if err != nil {
t.Fatalf("err: %s", err)
}
@ -93,7 +95,8 @@ func TestAuth_stdin(t *testing.T) {
ui := new(cli.MockUi)
c := &AuthCommand{
Meta: meta.Meta{
Ui: ui,
Ui: ui,
TokenHelper: DefaultTokenHelper,
},
testStdin: stdinR,
}
@ -122,7 +125,8 @@ func TestAuth_badToken(t *testing.T) {
ui := new(cli.MockUi)
c := &AuthCommand{
Meta: meta.Meta{
Ui: ui,
Ui: ui,
TokenHelper: DefaultTokenHelper,
},
}
@ -148,7 +152,8 @@ func TestAuth_method(t *testing.T) {
"test": &testAuthHandler{},
},
Meta: meta.Meta{
Ui: ui,
Ui: ui,
TokenHelper: DefaultTokenHelper,
},
}
@ -161,7 +166,7 @@ func TestAuth_method(t *testing.T) {
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
}
helper, err := c.TokenHelper()
helper, err := c.TokenHelper(&c.Meta)
if err != nil {
t.Fatalf("err: %s", err)
}

View File

@ -424,7 +424,7 @@ func (c *ServerCommand) enableDev(core *vault.Core, rootTokenID string) (*vault.
}
// Set the token
tokenHelper, err := c.TokenHelper()
tokenHelper, err := c.TokenHelper(&c.Meta)
if err != nil {
return nil, err
}

25
command/util.go Normal file
View File

@ -0,0 +1,25 @@
package command
import (
"github.com/hashicorp/vault/command/token"
"github.com/hashicorp/vault/meta"
)
// DefaultTokenHelper returns the token helper that is configured for Vault.
func DefaultTokenHelper(m *meta.Meta) (token.TokenHelper, error) {
config, err := m.Config()
if err != nil {
return nil, err
}
path := config.TokenHelper
if path == "" {
return &token.InternalTokenHelper{}, nil
}
path, err = token.ExternalTokenHelperPath(path)
if err != nil {
return nil, err
}
return &token.ExternalTokenHelper{BinaryPath: path}, nil
}

View File

@ -24,6 +24,8 @@ import (
// default FlagSet returned by Meta.FlagSet.
type FlagSetFlags uint
type TokenHelperFunc func(*Meta) (token.TokenHelper, error)
const (
FlagSetNone FlagSetFlags = 0
FlagSetServer FlagSetFlags = 1 << iota
@ -51,6 +53,9 @@ type Meta struct {
// These are internal and shouldn't be modified or access by anyone
// except Meta.
config *Config
// Queried if no token can be found
TokenHelper TokenHelperFunc
}
// Client returns the API client to a Vault server given the configured
@ -120,14 +125,16 @@ func (m *Meta) Client() (*api.Client, error) {
// If we don't have a token, check the token helper
if token == "" {
// If we have a token, then set that
tokenHelper, err := m.TokenHelper()
if err != nil {
return nil, err
}
token, err = tokenHelper.Get()
if err != nil {
return nil, err
if m.TokenHelper != nil {
// If we have a token, then set that
tokenHelper, err := m.TokenHelper(m)
if err != nil {
return nil, err
}
token, err = tokenHelper.Get()
if err != nil {
return nil, err
}
}
}
@ -193,25 +200,6 @@ func (m *Meta) FlagSet(n string, fs FlagSetFlags) *flag.FlagSet {
return f
}
// TokenHelper returns the token helper that is configured for Vault.
func (m *Meta) TokenHelper() (token.TokenHelper, error) {
config, err := m.Config()
if err != nil {
return nil, err
}
path := config.TokenHelper
if path == "" {
return &token.InternalTokenHelper{}, nil
}
path, err = token.ExternalTokenHelperPath(path)
if err != nil {
return nil, err
}
return &token.ExternalTokenHelper{BinaryPath: path}, nil
}
func (m *Meta) loadCACert(path string) (*x509.CertPool, error) {
certs, err := m.loadCertFromPEM(path)
if err != nil {