diff --git a/config/letsencrypt/storage.go b/config/letsencrypt/storage.go index 54a89599f..ca4405a8d 100644 --- a/config/letsencrypt/storage.go +++ b/config/letsencrypt/storage.go @@ -79,6 +79,8 @@ func emailUsername(email string) string { at := strings.Index(email, "@") if at == -1 { return email + } else if at == 0 { + return email[1:] } return email[:at] } diff --git a/config/letsencrypt/storage_test.go b/config/letsencrypt/storage_test.go new file mode 100644 index 000000000..812f55010 --- /dev/null +++ b/config/letsencrypt/storage_test.go @@ -0,0 +1,66 @@ +package letsencrypt + +import "testing" + +func TestStorage(t *testing.T) { + storage = Storage("./letsencrypt") + + if expected, actual := "letsencrypt/sites", storage.Sites(); actual != expected { + t.Errorf("Expected Sites() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/sites/test.com", storage.Site("test.com"); actual != expected { + t.Errorf("Expected Site() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/sites/test.com/test.com.crt", storage.SiteCertFile("test.com"); actual != expected { + t.Errorf("Expected SiteCertFile() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/sites/test.com/test.com.key", storage.SiteKeyFile("test.com"); actual != expected { + t.Errorf("Expected SiteKeyFile() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/sites/test.com/test.com.json", storage.SiteMetaFile("test.com"); actual != expected { + t.Errorf("Expected SiteMetaFile() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/users", storage.Users(); actual != expected { + t.Errorf("Expected Users() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/users/me@example.com", storage.User("me@example.com"); actual != expected { + t.Errorf("Expected User() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/users/me@example.com/me.json", storage.UserRegFile("me@example.com"); actual != expected { + t.Errorf("Expected UserRegFile() to return '%s' but got '%s'", expected, actual) + } + if expected, actual := "letsencrypt/users/me@example.com/me.key", storage.UserKeyFile("me@example.com"); actual != expected { + t.Errorf("Expected UserKeyFile() to return '%s' but got '%s'", expected, actual) + } +} + +func TestEmailUsername(t *testing.T) { + for i, test := range []struct { + input, expect string + }{ + { + input: "username@example.com", + expect: "username", + }, + { + input: "plus+addressing@example.com", + expect: "plus+addressing", + }, + { + input: "me+plus-addressing@example.com", + expect: "me+plus-addressing", + }, + { + input: "not-an-email", + expect: "not-an-email", + }, + { + input: "@foobar.com", + expect: "foobar.com", + }, + } { + if actual := emailUsername(test.input); actual != test.expect { + t.Errorf("Test %d: Expected username to be '%s' but was '%s'", i, test.expect, actual) + } + } +}