Skip to content

Commit 37e325f

Browse files
committed
Support pass start session response with env variable
1 parent b197cc8 commit 37e325f

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/sessionmanagerplugin/session/session.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121
"io"
2222
"os"
23+
"strings"
2324
"time"
2425

2526
"github.com/aws/session-manager-plugin/src/config"
@@ -162,7 +163,14 @@ func ValidateInputAndStartSession(args []string, out io.Writer) {
162163
for argsIndex := 1; argsIndex < len(args); argsIndex++ {
163164
switch argsIndex {
164165
case 1:
165-
response = []byte(args[1])
166+
if strings.HasPrefix(args[1], "AWS_SSM_START_SESSION_RESPONSE") == true {
167+
response = []byte(os.Getenv(args[1]))
168+
if err = os.Unsetenv(args[1]); err != nil {
169+
log.Errorf("Failed to remove temporary session env parameter: %v", err)
170+
}
171+
} else {
172+
response = []byte(args[1])
173+
}
166174
case 2:
167175
region = args[2]
168176
case 3:

src/sessionmanagerplugin/session/session_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package session
1717
import (
1818
"bytes"
1919
"fmt"
20+
"os"
2021
"sync"
2122
"testing"
2223
"time"
@@ -61,6 +62,47 @@ func TestValidateInputAndStartSession(t *testing.T) {
6162
assert.Contains(t, buffer.String(), "Cannot perform start session: Some error")
6263
}
6364

65+
func TestValidateInputAndStartSessionWithEnvVariableParameter(t *testing.T) {
66+
var buffer bytes.Buffer
67+
sessionResponse := "{\"SessionId\": \"user-012345\", \"TokenValue\": \"Session-Token\", \"StreamUrl\": \"wss://ssmmessages.us-east-1.amazonaws.com/v1/data-channel/user-012345?role=publish_subscribe\"}"
68+
os.Setenv("AWS_SSM_START_SESSION_RESPONSE", sessionResponse)
69+
args := []string{"session-manager-plugin",
70+
"AWS_SSM_START_SESSION_RESPONSE",
71+
"us-east-1", "StartSession", "", "{\"Target\": \"i-0123abc\"}", "https://ssm.us-east-1.amazonaws.com"}
72+
parameterPassed := false
73+
startSession = func(session *Session, log log.T) error {
74+
if session.TokenValue == "Session-Token" && session.SessionId == "user-012345" {
75+
parameterPassed = true
76+
}
77+
return nil
78+
}
79+
80+
ValidateInputAndStartSession(args, &buffer)
81+
var _, envVariableExist = os.LookupEnv("AWS_SSM_START_SESSION_RESPONSE")
82+
assert.False(t, envVariableExist)
83+
assert.True(t, parameterPassed)
84+
}
85+
86+
func TestValidateInputAndStartSessionWithWrongEnvVariableName(t *testing.T) {
87+
var buffer bytes.Buffer
88+
sessionResponse := "{\"SessionId\": \"user-012345\", \"TokenValue\": \"Session-Token\", \"StreamUrl\": \"wss://ssmmessages.us-east-1.amazonaws.com/v1/data-channel/user-012345?role=publish_subscribe\"}"
89+
os.Setenv("WRONG_ENV_NAME", sessionResponse)
90+
args := []string{"session-manager-plugin",
91+
"WRONG_ENV_NAME",
92+
"us-east-1", "StartSession", "", "{\"Target\": \"i-0123abc\"}", "https://ssm.us-east-1.amazonaws.com"}
93+
startSessionInvoked := false
94+
startSession = func(session *Session, log log.T) error {
95+
startSessionInvoked = true
96+
return nil
97+
}
98+
99+
ValidateInputAndStartSession(args, &buffer)
100+
var _, envVariableExist = os.LookupEnv("WRONG_ENV_NAME")
101+
assert.Contains(t, buffer.String(), "Cannot perform start session: invalid character 'W'")
102+
assert.True(t, envVariableExist)
103+
assert.False(t, startSessionInvoked)
104+
}
105+
64106
func TestExecute(t *testing.T) {
65107
sessionMock := &Session{}
66108
sessionMock.DataChannel = mockDataChannel

0 commit comments

Comments
 (0)