Skip to content

Commit 05c5546

Browse files
committed
sanitize configuration values on read or write
* trims trailing whitespace or newline characters
1 parent 983b0d5 commit 05c5546

2 files changed

Lines changed: 45 additions & 3 deletions

File tree

config/config.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type Config struct {
3535

3636
// ToFile writes a Config to a JSON file.
3737
func ToFile(path string, c Config) error {
38+
sanitize(&c)
3839
bytes, err := json.Marshal(c)
3940
if err != nil {
4041
return err
@@ -56,6 +57,11 @@ func FromFile(path string) (c Config, err error) {
5657
}
5758

5859
err = json.Unmarshal(bytes, &c)
60+
if err != nil {
61+
return
62+
}
63+
sanitize(&c)
64+
5965
return
6066
}
6167

@@ -106,3 +112,14 @@ func demoDirectory() (dir string, err error) {
106112
dir = filepath.Join(dir, DemoDirname)
107113
return
108114
}
115+
116+
func sanitize(c *Config) {
117+
c.GithubUsername = sanitizeField(c.GithubUsername)
118+
c.APIKey = sanitizeField(c.APIKey)
119+
c.ExercismDirectory = sanitizeField(c.ExercismDirectory)
120+
c.Hostname = sanitizeField(c.Hostname)
121+
}
122+
123+
func sanitizeField(v string) string {
124+
return strings.TrimSpace(v)
125+
}

config/config_test.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,41 @@ func TestReadingWritingConfig(t *testing.T) {
3434
filename := Filename(tmpDir)
3535
assert.NoError(t, err)
3636

37-
writtenConfig := Config{
37+
currentConfig := Config{
3838
GithubUsername: "user",
3939
APIKey: "MyKey",
4040
ExercismDirectory: "/exercism/directory",
41+
Hostname: "localhost\r\n",
42+
}
43+
sanitizedConfig := Config{
44+
GithubUsername: "user",
45+
APIKey: "MyKey",
46+
ExercismDirectory: "/exercism/directory",
47+
Hostname: "localhost",
4148
}
4249

43-
ToFile(filename, writtenConfig)
50+
ToFile(filename, currentConfig)
4451

4552
loadedConfig, err := FromFile(filename)
4653
assert.NoError(t, err)
4754

48-
assert.Equal(t, writtenConfig, loadedConfig)
55+
assert.Equal(t, sanitizedConfig, loadedConfig)
56+
}
57+
58+
func TestSanitizeFields(t *testing.T) {
59+
config := Config{
60+
GithubUsername: "user ",
61+
APIKey: "MyKey ",
62+
ExercismDirectory: "/home/user name\r\n",
63+
Hostname: "localhost\n",
64+
}
65+
sanitizedConfig := Config{
66+
GithubUsername: "user",
67+
APIKey: "MyKey",
68+
ExercismDirectory: "/home/user name",
69+
Hostname: "localhost",
70+
}
71+
sanitize(&config)
72+
73+
assert.Equal(t, config, sanitizedConfig)
4974
}

0 commit comments

Comments
 (0)