Skip to content

Commit 5bd98a8

Browse files
committed
fix: unquote environment variable passed to hook commands
1 parent 857a59a commit 5bd98a8

4 files changed

Lines changed: 16 additions & 13 deletions

File tree

internal/hooks/hook_executor_default_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ func Test_Hook_Execute_Default_Protocol(t *testing.T) {
6060
opts: HookExecOpts{
6161
Hook: HookScript{Name: "happypath", Command: "echo {}"},
6262
Env: map[string]string{
63-
"batman": "robin",
64-
"yin": "yang",
63+
"BATMAN": "robin hood",
64+
"YIN": "yang",
6565
},
6666
Exec: &MockExec{
6767
mockCommand: &MockCommand{
@@ -74,8 +74,8 @@ func Test_Hook_Execute_Default_Protocol(t *testing.T) {
7474
response, err := executor.Execute(ctx, opts)
7575
require.Equal(t, "test output", response)
7676
require.Equal(t, nil, err)
77-
require.Contains(t, opts.Exec.(*MockExec).mockCommand.Env, `batman="robin"`)
78-
require.Contains(t, opts.Exec.(*MockExec).mockCommand.Env, `yin="yang"`)
77+
require.Contains(t, opts.Exec.(*MockExec).mockCommand.Env, `BATMAN=robin hood`)
78+
require.Contains(t, opts.Exec.(*MockExec).mockCommand.Env, `YIN=yang`)
7979
},
8080
},
8181
"failed execution": {

internal/hooks/hook_executor_v2_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ func Test_Hook_Execute_V2_Protocol(t *testing.T) {
5555
opts: HookExecOpts{
5656
Hook: HookScript{Name: "happypath", Command: "echo {}"},
5757
Env: map[string]string{
58-
"batman": "robin",
59-
"yin": "yang",
58+
"BATMAN": "robin hood",
59+
"YIN": "yang",
6060
},
6161
Exec: &MockExec{
6262
mockCommand: &MockCommand{
@@ -68,8 +68,8 @@ func Test_Hook_Execute_V2_Protocol(t *testing.T) {
6868
check: func(t *testing.T, response string, err error, mockExec ExecInterface) {
6969
require.Equal(t, `{"message": "hello world"}`, response)
7070
require.Equal(t, nil, err)
71-
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `batman="robin"`)
72-
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `yin="yang"`)
71+
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `BATMAN=robin hood`)
72+
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `YIN=yang`)
7373
},
7474
},
7575
"successful execution with payload > 64kb": {
@@ -89,8 +89,8 @@ func Test_Hook_Execute_V2_Protocol(t *testing.T) {
8989
check: func(t *testing.T, response string, err error, mockExec ExecInterface) {
9090
require.Equal(t, sixtyFourKBString, response)
9191
require.Equal(t, nil, err)
92-
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `batman="robin"`)
93-
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `yin="yang"`)
92+
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `batman=robin`)
93+
require.Contains(t, mockExec.(*MockExec).mockCommand.Env, `yin=yang`)
9494
},
9595
},
9696
"successful execution with payload > 512kb": {

internal/hooks/hooks.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ func processExecOpts(opts HookExecOpts) ([]string, []string, []string, error) {
5757
// To avoid removing any environment variables that are set in the current environment, we first set the cmd.Env to the current environment.
5858
// before adding any new environment variables.
5959
var cmdEnvVars = os.Environ()
60-
cmdEnvVars = append(cmdEnvVars, goutils.MapToStringSlice(opts.Env, "")...)
60+
for name, value := range opts.Env {
61+
cmdEnvVars = append(cmdEnvVars, name+"="+value)
62+
}
6163

6264
return cmdArgs, cmdArgVars, cmdEnvVars, nil
6365
}

internal/pkg/platform/localserver.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
"github.com/gorilla/websocket"
3131
"github.com/radovskyb/watcher"
3232
"github.com/slackapi/slack-cli/internal/config"
33-
"github.com/slackapi/slack-cli/internal/goutils"
3433
"github.com/slackapi/slack-cli/internal/hooks"
3534
"github.com/slackapi/slack-cli/internal/iostreams"
3635
"github.com/slackapi/slack-cli/internal/pkg/apps"
@@ -307,7 +306,9 @@ func (r *LocalServer) StartDelegate(ctx context.Context) error {
307306
// To avoid removing any environment variables that are set in the current environment, we first set the cmd.Env to the current environment.
308307
// before adding any new environment variables.
309308
var cmdEnvVars = os.Environ()
310-
cmdEnvVars = append(cmdEnvVars, goutils.MapToStringSlice(sdkManagedConnectionStartHookOpts.Env, "")...)
309+
for name, value := range sdkManagedConnectionStartHookOpts.Env {
310+
cmdEnvVars = append(cmdEnvVars, name+"="+value)
311+
}
311312
cmd := sdkManagedConnectionStartHookOpts.Exec.Command(cmdEnvVars, os.Stdout, os.Stderr, nil, cmdArgs[0], cmdArgVars...)
312313

313314
// Store command reference for lifecycle management

0 commit comments

Comments
 (0)