use struct instead of map

remove gosec warnings
pull/8334/head
Marcin Niemira 2020-05-30 20:34:53 +10:00
parent 49c3a73563
commit 81073a0561
No known key found for this signature in database
GPG Key ID: 053E25BDC33ED6A3
2 changed files with 65 additions and 44 deletions

View File

@ -28,48 +28,63 @@ import (
"github.com/docker/machine/libmachine/shell" "github.com/docker/machine/libmachine/shell"
) )
var shellConfigMap = map[string]map[string]string{ type shellData struct {
"fish": { Prefix string
"Prefix": "set -gx ", Suffix string
"Suffix": "\";\n", // semi-colon required for fish 2.7 Delimiter string
"Delimiter": " \"", UnsetPrefix string
"UnsetPrefix": "set -e ", UnsetSuffix string
"UnsetSuffix": ";\n", UnsetDelimiter string
}
var shellConfigMap = map[string]shellData{
"fish": shellData{
"set -gx ",
"\";\n",
" \"",
"set -e ",
";\n",
" \"",
}, },
"powershell": { "powershell": shellData{
"Prefix": "$Env:", "$Env:",
"Suffix": "\"\n", "\"\n",
"Delimiter": " = \"", " = \"",
"UnsetPrefix": `Remove-Item Env:\\`, `Remove-Item Env:\\`,
"UnsetSuffix": "\n", "\n",
" = \"",
}, },
"cmd": { "cmd": shellData{
"Prefix": "SET ", "SET ",
"Suffix": "\n", "\n",
"Delimiter": "=", "=",
"UnsetPrefix": "SET ", "SET ",
"UnsetSuffix": "\n", "\n",
"setDelim": "=", "=",
}, },
"emacs": { "emacs": shellData{
"Prefix": "(setenv \"", "(setenv \"",
"Suffix": "\")\n", "\")\n",
"Delimiter": "\" \"", "\" \"",
"UnsetPrefix": "(setenv \"", "(setenv \"",
"UnsetSuffix": ")\n", ")\n",
"UnsetDelim": "\" nil", "\" nil",
}, },
"bash": { "bash": shellData{
"Prefix": "export ", "export ",
"Suffix": "\"\n", "\"\n",
"Delimiter": "=\"", "=\"",
"UnsetPrefix": "unset ", "unset ",
"UnsetSuffix": "\n", "\n",
"=\"",
}, },
"none": { "none": shellData{
"Prefix": "", "",
"Suffix": "\n", "\n",
"Delimiter": "=", "=",
"",
"\n",
"=",
}, },
} }
@ -127,7 +142,7 @@ func CfgSet(ec EnvConfig, plz, cmd string) *Config {
shellKey = "bash" shellKey = "bash"
} }
shellParams := shellConfigMap[shellKey] shellParams := shellConfigMap[shellKey]
s.Suffix, s.Prefix, s.Delimiter = shellParams["Suffix"], shellParams["Prefix"], shellParams["Delimiter"] s.Suffix, s.Prefix, s.Delimiter = shellParams.Suffix, shellParams.Prefix, shellParams.Delimiter
if shellKey != "none" { if shellKey != "none" {
s.UsageHint = generateUsageHint(ec.Shell, plz, cmd) s.UsageHint = generateUsageHint(ec.Shell, plz, cmd)
@ -151,16 +166,22 @@ func SetScript(ec EnvConfig, w io.Writer, envTmpl string, data interface{}) erro
func UnsetScript(ec EnvConfig, w io.Writer, vars []string) error { func UnsetScript(ec EnvConfig, w io.Writer, vars []string) error {
var sb strings.Builder var sb strings.Builder
shCfg := shellConfigMap[ec.Shell] shCfg := shellConfigMap[ec.Shell]
pfx, sfx, delim := shCfg["Prefix"], shCfg["Suffix"], shCfg["Delimiter"] pfx, sfx, delim := shCfg.UnsetPrefix, shCfg.UnsetSuffix, shCfg.UnsetDelimiter
switch ec.Shell { switch ec.Shell {
case "cmd", "emacs", "fish": case "cmd", "emacs", "fish":
for _, v := range vars { for _, v := range vars {
sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx)) if _, err := sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx)); err != nil {
return err
}
} }
case "powershell": case "powershell":
sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx)) if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx)); err != nil {
return err
}
default: default:
sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx)) if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx)); err != nil {
return err
}
} }
_, err := w.Write([]byte(sb.String())) _, err := w.Write([]byte(sb.String()))
return err return err

View File

@ -68,8 +68,8 @@ func TestUnsetScript(t *testing.T) {
ec EnvConfig ec EnvConfig
expected string expected string
}{ }{
{[]string{"foo"}, EnvConfig{"bash"}, `export foo"`}, {[]string{"foo"}, EnvConfig{"bash"}, `unset foo`},
{[]string{"bar"}, EnvConfig{"powershell"}, `$Env:bar"`}, {[]string{"bar"}, EnvConfig{"powershell"}, `Remove-Item Env:\\bar`},
{[]string{"baz"}, EnvConfig{"cmd"}, `SET baz=`}, {[]string{"baz"}, EnvConfig{"cmd"}, `SET baz=`},
} }
for _, tc := range testCases { for _, tc := range testCases {