Skip to content

Commit 73c077a

Browse files
committed
fix a number of small issues
1 parent 8a8882b commit 73c077a

1 file changed

Lines changed: 31 additions & 32 deletions

File tree

main.go

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ var Version string
4747
func main() {
4848
flag.Usage = func() { fmt.Fprintf(os.Stderr, "%s\n", USAGE) }
4949

50-
if len(os.Args) == 1 {
51-
flag.Usage()
52-
os.Exit(0)
53-
return
54-
}
55-
5650
var (
5751
verboseFlag, versionFlag, humanOutputFlag bool
5852
configFilenameFlag string
@@ -67,18 +61,21 @@ func main() {
6761
flag.Parse()
6862

6963
argv := flag.Args()
64+
if len(argv) == 0 {
65+
flag.Usage()
66+
os.Exit(0)
67+
}
7068

7169
slog.Debug("flags",
7270
"version", versionFlag,
7371
"human", humanOutputFlag,
74-
"confg", configFilenameFlag,
72+
"config", configFilenameFlag,
7573
"argv", argv,
7674
)
7775

7876
if versionFlag {
7977
slog.Info("sesame", "version", Version)
8078
os.Exit(0)
81-
return
8279
}
8380

8481
var logHandler slog.Handler
@@ -111,11 +108,10 @@ func main() {
111108

112109
var cfg Configuration
113110
if err := toml.Unmarshal(configData, &cfg); err != nil {
114-
slog.Error("unmashaling toml configuration", "err", err)
111+
slog.Error("unmarshaling toml configuration", "err", err)
115112
return
116113
}
117114

118-
// Expand environment variables part of prefix or secrets
119115
cfg.Prefix = os.ExpandEnv(cfg.Prefix)
120116
for idx, item := range cfg.Secrets {
121117
cfg.Secrets[idx] = os.ExpandEnv(item)
@@ -129,49 +125,54 @@ func main() {
129125
}
130126

131127
env := os.Environ()
132-
133128
client := ssm.NewFromConfig(awscfg)
134129

135130
nextToken := ""
136131
for {
137132
data, err := client.GetParametersByPath(ctx, &ssm.GetParametersByPathInput{
138-
Path: &cfg.Prefix,
139-
NextToken: aws.String(nextToken),
140-
Recursive: aws.Bool(true),
133+
Path: &cfg.Prefix,
134+
NextToken: aws.String(nextToken),
135+
Recursive: aws.Bool(true),
136+
WithDecryption: aws.Bool(true),
141137
})
142138
if err != nil {
143139
slog.Error("error fetching parameters by path", "err", err)
144-
continue
140+
break
145141
}
146142

147143
for _, param := range data.Parameters {
144+
if param.Value == nil {
145+
continue
146+
}
148147
name := parameterToEnv(param.Name)
149148
env = append(env, fmt.Sprintf("%s=%s", name, *param.Value))
150149
}
151150

152-
if *data.NextToken != "" {
151+
if data.NextToken != nil && *data.NextToken != "" {
153152
nextToken = *data.NextToken
154153
continue
155154
}
156155
break
157156
}
158157

159-
// Secrets, requested in batches of max 10 paths
160158
for _, chunk := range chunked(cfg.Secrets) {
161159
data, err := client.GetParameters(ctx, &ssm.GetParametersInput{
162-
Names: chunk,
160+
Names: chunk,
161+
WithDecryption: aws.Bool(true),
163162
})
164163
if err != nil {
165164
slog.Error("error fetching parameters", "err", err)
166165
continue
167166
}
168167
for _, param := range data.Parameters {
168+
if param.Value == nil {
169+
continue
170+
}
169171
name := parameterToEnv(param.Name)
170172
env = append(env, fmt.Sprintf("%s=%s", name, *param.Value))
171173
}
172174
}
173175

174-
// exec(1) and give up control
175176
if err := syscall.Exec(argv[0], argv[1:], env); err != nil {
176177
slog.Error("error executing command", "cmd", argv, "err", err)
177178
os.Exit(1)
@@ -181,28 +182,26 @@ func main() {
181182
var parameterNameRx *regexp.Regexp = regexp.MustCompile("/([^/]+)$")
182183

183184
func parameterToEnv(name *string) string {
184-
return parameterNameRx.FindString(*name)
185+
if name == nil {
186+
return ""
187+
}
188+
if m := parameterNameRx.FindStringSubmatch(*name); len(m) > 1 {
189+
return m[1]
190+
}
191+
return ""
185192
}
186193

187-
// chunked, split a slice in multiple slices containing up to 10 elements of
188-
// the original slice. The input slice is modified.
189194
func chunked(slice []string) [][]string {
190195
chunkSize := 10
191196
var chunks [][]string
192-
for {
193-
if len(slice) == 0 {
194-
break
195-
}
196-
197-
// necessary check to avoid slicing beyond
198-
// slice capacity
197+
for len(slice) != 0 {
199198
if len(slice) < chunkSize {
200199
chunkSize = len(slice)
201200
}
202-
203-
chunks = append(chunks, slice[0:chunkSize])
201+
c := make([]string, chunkSize)
202+
copy(c, slice[:chunkSize])
203+
chunks = append(chunks, c)
204204
slice = slice[chunkSize:]
205205
}
206-
207206
return chunks
208207
}

0 commit comments

Comments
 (0)