Skip to content

Commit

Permalink
Support special characters in teller sh (#132)
Browse files Browse the repository at this point in the history
* Fix load env when password has parentheses

When a password has ( or ), eval "$(teller sh)" is not working:

$ eval "$(teller sh)"
bash: syntax error near unexpected token `('

* Add e2e for teller env
  • Loading branch information
kpetremann committed Aug 25, 2022
1 parent f7f6865 commit 604abec
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 2 deletions.
46 changes: 46 additions & 0 deletions e2e/tests/sh.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
name: Sh print
command: <binary-path> sh
config_file_name: .teller.yml
config_content: >
project: test
providers:
filesystem:
env_sync:
path: {{.Folder}}/settings/test/all
env:
FOO:
path: {{.Folder}}/settings/test/foo
BAR:
path: {{.Folder}}/settings/test/bar
init_snapshot:
- path: settings/test
file_name: foo
content: shazam
- path: settings/test
file_name: bar
content: shazam
- path: settings/test/all
file_name: secret-a
content: mailman
- path: settings/test/all
file_name: secret-b
content: shazam
- path: settings/test/all
file_name: secret-c
content: shazam-1
- path: settings/test/all
file_name: secret-d
content: ()"';@ \(\)\"\'\;\@

expected_snapshot:
expected_stderr:
expected_stdout: |
#!/bin/sh
export secret-d='()"'"'"';@ \(\)\"\'"'"'\;\@'
export secret-c='shazam-1'
export secret-b='shazam'
export secret-a='mailman'
export FOO='shazam'
export BAR='shazam'
3 changes: 2 additions & 1 deletion pkg/teller.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,8 @@ func (tl *Teller) ExportEnv() string {
fmt.Fprintf(&b, "#!/bin/sh\n")
for i := range tl.Entries {
v := tl.Entries[i]
fmt.Fprintf(&b, "export %s=%s\n", v.Key, v.Value)
value := strings.ReplaceAll(v.Value, "'", "'\"'\"'")
fmt.Fprintf(&b, "export %s='%s'\n", v.Key, value)
}
return b.String()
}
Expand Down
23 changes: 22 additions & 1 deletion pkg/teller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func TestTellerExports(t *testing.T) {
}

b = tl.ExportEnv()
assert.Equal(t, b, "#!/bin/sh\nexport k=v\n")
assert.Equal(t, b, "#!/bin/sh\nexport k='v'\n")

b, err := tl.ExportYAML()
assert.NoError(t, err)
Expand All @@ -144,6 +144,27 @@ func TestTellerExports(t *testing.T) {
assert.Equal(t, b, "{\n \"k\": \"v\"\n}")
}

func TestTellerShExportEscaped(t *testing.T) {
tl := Teller{
Logger: getLogger(),
Entries: []core.EnvEntry{},
Providers: &BuiltinProviders{},
}

b := tl.ExportEnv()
assert.Equal(t, b, "#!/bin/sh\n")

tl = Teller{
Logger: getLogger(),
Entries: []core.EnvEntry{
{Key: "k", Value: `()"';@ \(\)\"\'\;\@`, ProviderName: "test-provider", ResolvedPath: "path/kv"},
},
}

b = tl.ExportEnv()
assert.Equal(t, b, "#!/bin/sh\nexport k='()\"'\"'\"';@ \\(\\)\\\"\\'\"'\"'\\;\\@'\n")
}

func TestTellerCollect(t *testing.T) {
var b bytes.Buffer
p, _ := NewInMemProvider(false)
Expand Down

0 comments on commit 604abec

Please sign in to comment.