Remove bare option, prevent writes ending in slash, and return an exact file match as "."

This commit is contained in:
Jeff Mitchell 2016-01-16 17:47:41 -05:00
parent 455931873a
commit e412ac8461
4 changed files with 32 additions and 34 deletions

View File

@ -35,9 +35,7 @@ func OutputList(ui cli.Ui, format string, secret *api.Secret) int {
case "yaml":
return outputFormatYAMLList(ui, secret)
case "table":
return outputFormatTableList(ui, secret, false)
case "bare":
return outputFormatTableList(ui, secret, true)
return outputFormatTableList(ui, secret)
default:
ui.Error(fmt.Sprintf("Invalid output format: %s", format))
return 1
@ -150,7 +148,7 @@ func outputFormatTable(ui cli.Ui, s *api.Secret, whitespace bool) int {
return 0
}
func outputFormatTableList(ui cli.Ui, s *api.Secret, bare bool) int {
func outputFormatTableList(ui cli.Ui, s *api.Secret) int {
config := columnize.DefaultConfig()
config.Delim = "♨"
config.Glue = "\t"
@ -158,13 +156,11 @@ func outputFormatTableList(ui cli.Ui, s *api.Secret, bare bool) int {
input := make([]string, 0, 5)
if !bare {
input = append(input, "Keys")
}
input = append(input, "Keys")
keys := make([]string, 0, len(s.Data["keys"].([]string)))
for _, k := range s.Data["keys"].([]string) {
keys = append(keys, k)
keys := make([]string, 0, len(s.Data["keys"].([]interface{})))
for _, k := range s.Data["keys"].([]interface{}) {
keys = append(keys, k.(string))
}
sort.Strings(keys)
@ -172,19 +168,13 @@ func outputFormatTableList(ui cli.Ui, s *api.Secret, bare bool) int {
input = append(input, fmt.Sprintf("%s", k))
}
if !bare && len(s.Warnings) != 0 {
if len(s.Warnings) != 0 {
input = append(input, "")
for _, warning := range s.Warnings {
input = append(input, fmt.Sprintf("* %s", warning))
}
}
if bare {
for _, line := range input {
ui.Output(line)
}
} else {
ui.Output(columnize.Format(input, config))
}
ui.Output(columnize.Format(input, config))
return 0
}

View File

@ -15,13 +15,11 @@ type ListCommand struct {
func (c *ListCommand) Run(args []string) int {
var format string
var bare bool
var err error
var secret *api.Secret
var flags *flag.FlagSet
flags = c.Meta.FlagSet("list", FlagSetDefault)
flags.StringVar(&format, "format", "table", "")
flags.BoolVar(&bare, "bare", false, "")
flags.Usage = func() { c.Ui.Error(c.Help()) }
if err := flags.Parse(args); err != nil {
return 1
@ -58,16 +56,10 @@ func (c *ListCommand) Run(args []string) int {
return 1
}
if secret.Data["keys"] == nil {
if !bare {
c.Ui.Error("No entries found")
}
c.Ui.Error("No entries found")
return 0
}
if bare {
return OutputList(c.Ui, "bare", secret)
}
return OutputList(c.Ui, format, secret)
}
@ -93,9 +85,6 @@ Read Options:
-format=table The format for output. By default it is a whitespace-
delimited table. This can also be json or yaml.
-bare Causes the key values to be output raw to stdout,
without formatting (except for newlines).
`
return strings.TrimSpace(helpText)
}

View File

@ -117,6 +117,11 @@ func (b *CubbyholeBackend) handleWrite(
return nil, fmt.Errorf("missing data fields")
}
path := req.Path
if strings.HasSuffix(path, "/") {
path = path[:len(path)-1]
}
// JSON encode the data
buf, err := json.Marshal(req.Data)
if err != nil {
@ -125,7 +130,7 @@ func (b *CubbyholeBackend) handleWrite(
// Write out a new key
entry := &logical.StorageEntry{
Key: req.ClientToken + "/" + req.Path,
Key: req.ClientToken + "/" + path,
Value: buf,
}
if err := req.Storage.Put(entry); err != nil {
@ -164,7 +169,12 @@ func (b *CubbyholeBackend) handleList(
// passthrough
strippedKeys := make([]string, len(keys))
for i, key := range keys {
strippedKeys[i] = req.MountPoint + req.Path + strings.TrimPrefix(key, req.ClientToken+"/")
ret := strings.TrimPrefix(key, req.ClientToken+"/")
if ret == "" {
strippedKeys[i] = "."
} else {
strippedKeys[i] = ret
}
}
// Generate the response

View File

@ -165,6 +165,11 @@ func (b *PassthroughBackend) handleWrite(
return logical.ErrorResponse("missing data fields"), nil
}
path := req.Path
if strings.HasSuffix(path, "/") {
path = path[:len(path)-1]
}
// Check if there is a ttl key; verify parseability if so
var ttl string
ttl = data.Get("ttl").(string)
@ -190,7 +195,7 @@ func (b *PassthroughBackend) handleWrite(
// Write out a new key
entry := &logical.StorageEntry{
Key: req.Path,
Key: path,
Value: buf,
}
if err := req.Storage.Put(entry); err != nil {
@ -223,7 +228,11 @@ func (b *PassthroughBackend) handleList(
// path and let users do what they wish.
retKeys := make([]string, len(keys))
for i, k := range keys {
retKeys[i] = req.MountPoint + req.Path + k
if k == "" {
retKeys[i] = "."
} else {
retKeys[i] = k
}
}
// Generate the response