From d5d1834c041d5c676a556965dc98299eef750c9c Mon Sep 17 00:00:00 2001 From: Jesse Hallam Date: Mon, 5 Feb 2018 14:56:01 -0500 Subject: ABC-173: introduce Normalize(Username|Email) (#8183) This centralizes the source of truth on the rules for username / email processing instead of scattering `strings.ToLower` invocations. --- model/compliance.go | 2 +- model/user.go | 18 +++++++++++++----- model/user_test.go | 24 ++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/model/compliance.go b/model/compliance.go index d39a3fa77..5546b7830 100644 --- a/model/compliance.go +++ b/model/compliance.go @@ -52,7 +52,7 @@ func (me *Compliance) PreSave() { } me.Count = 0 - me.Emails = strings.ToLower(me.Emails) + me.Emails = NormalizeEmail(me.Emails) me.Keywords = strings.ToLower(me.Keywords) me.CreateAt = GetMillis() diff --git a/model/user.go b/model/user.go index 901e8d7ad..1e1d49f7d 100644 --- a/model/user.go +++ b/model/user.go @@ -162,6 +162,14 @@ func InvalidUserError(fieldName string, userId string) *AppError { return NewAppError("User.IsValid", id, nil, details, http.StatusBadRequest) } +func NormalizeUsername(username string) string { + return strings.ToLower(username) +} + +func NormalizeEmail(email string) string { + return strings.ToLower(email) +} + // PreSave will set the Id and Username if missing. It will also fill // in the CreateAt, UpdateAt times. It will also hash the password. It should // be run before saving the user to the db. @@ -178,8 +186,8 @@ func (u *User) PreSave() { u.AuthData = nil } - u.Username = strings.ToLower(u.Username) - u.Email = strings.ToLower(u.Email) + u.Username = NormalizeUsername(u.Username) + u.Email = NormalizeEmail(u.Email) u.CreateAt = GetMillis() u.UpdateAt = u.CreateAt @@ -207,8 +215,8 @@ func (u *User) PreSave() { // PreUpdate should be run before updating the user in the db. func (u *User) PreUpdate() { - u.Username = strings.ToLower(u.Username) - u.Email = strings.ToLower(u.Email) + u.Username = NormalizeUsername(u.Username) + u.Email = NormalizeEmail(u.Email) u.UpdateAt = GetMillis() if u.AuthData != nil && *u.AuthData == "" { @@ -563,7 +571,7 @@ func IsValidUsername(s string) bool { } func CleanUsername(s string) string { - s = strings.ToLower(strings.Replace(s, " ", "-", -1)) + s = NormalizeUsername(strings.Replace(s, " ", "-", -1)) for _, value := range reservedName { if s == value { diff --git a/model/user_test.go b/model/user_test.go index c91051532..2bf8b2a65 100644 --- a/model/user_test.go +++ b/model/user_test.go @@ -243,6 +243,30 @@ func TestValidUsername(t *testing.T) { } } +func TestNormalizeUsername(t *testing.T) { + if NormalizeUsername("Spin-punch") != "spin-punch" { + t.Fatal("didn't normalize username properly") + } + if NormalizeUsername("PUNCH") != "punch" { + t.Fatal("didn't normalize username properly") + } + if NormalizeUsername("spin") != "spin" { + t.Fatal("didn't normalize username properly") + } +} + +func TestNormalizeEmail(t *testing.T) { + if NormalizeEmail("TEST@EXAMPLE.COM") != "test@example.com" { + t.Fatal("didn't normalize email properly") + } + if NormalizeEmail("TEST2@example.com") != "test2@example.com" { + t.Fatal("didn't normalize email properly") + } + if NormalizeEmail("test3@example.com") != "test3@example.com" { + t.Fatal("didn't normalize email properly") + } +} + func TestCleanUsername(t *testing.T) { if CleanUsername("Spin-punch") != "spin-punch" { t.Fatal("didn't clean name properly") -- cgit v1.2.3-1-g7c22