From 2e911b77c3386833f8f0cea82c7b6b3e5583a08e Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 3 Mar 2017 12:04:15 -0500 Subject: Usernames must start with a letter (#5581) --- api/status_test.go | 4 +- api/team_test.go | 20 +++++----- api/user_test.go | 82 ++++++++++++++++++++------------------ api4/user_test.go | 6 +++ app/import_test.go | 14 +++---- app/user_test.go | 4 +- model/user.go | 7 +++- model/user_test.go | 6 ++- store/sql_compliance_store_test.go | 4 +- store/sql_team_store_test.go | 4 +- store/sql_user_store_test.go | 20 +++++----- 11 files changed, 97 insertions(+), 74 deletions(-) diff --git a/api/status_test.go b/api/status_test.go index 34c3320bd..30bf8d16a 100644 --- a/api/status_test.go +++ b/api/status_test.go @@ -32,12 +32,12 @@ func TestStatuses(t *testing.T) { team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} rteam, _ := Client.CreateTeam(&team) - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) LinkUserToTeam(ruser, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Id)) - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser2 := Client.Must(Client.CreateUser(&user2, "")).Data.(*model.User) LinkUserToTeam(ruser2, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser2.Id)) diff --git a/api/team_test.go b/api/team_test.go index c4a0fbefb..2166c004b 100644 --- a/api/team_test.go +++ b/api/team_test.go @@ -22,7 +22,7 @@ func TestCreateTeam(t *testing.T) { t.Fatal(err) } - user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -144,7 +144,7 @@ func TestGetAllTeams(t *testing.T) { Client.Logout() - user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -178,7 +178,7 @@ func TestGetAllTeamListings(t *testing.T) { Client.Logout() - user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -225,7 +225,7 @@ func TestTeamPermDelete(t *testing.T) { Client.Logout() - user1 := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user1 := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user1 = Client.Must(Client.CreateUser(user1, "")).Data.(*model.User) LinkUserToTeam(user1, team) store.Must(app.Srv.Store.User().VerifyEmail(user1.Id)) @@ -270,7 +270,7 @@ func TestInviteMembers(t *testing.T) { Client.Logout() - user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -355,7 +355,7 @@ func TestUpdateTeamDisplayName(t *testing.T) { Client.Logout() - user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) LinkUserToTeam(user2, team) store.Must(app.Srv.Store.User().VerifyEmail(user2.Id)) @@ -416,7 +416,7 @@ func TestGetMyTeam(t *testing.T) { Client.Logout() - user := model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser, _ := Client.CreateUser(&user, "") LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) @@ -662,7 +662,7 @@ func TestGetTeamStats(t *testing.T) { } } - user := model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser, _ := Client.CreateUser(&user, "") store.Must(app.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) @@ -682,7 +682,7 @@ func TestUpdateTeamDescription(t *testing.T) { Client.Logout() - user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Jabba the Hutt", Password: "passwd1"} + user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Jabba the Hutt", Password: "passwd1", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) LinkUserToTeam(user2, team) store.Must(app.Srv.Store.User().VerifyEmail(user2.Id)) @@ -733,7 +733,7 @@ func TestGetTeamByName(t *testing.T) { Client.Must(Client.Logout()) - user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Jabba the Hutt", Password: "passwd1"} + user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Jabba the Hutt", Password: "passwd1", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) store.Must(app.Srv.Store.User().VerifyEmail(user2.Id)) diff --git a/api/user_test.go b/api/user_test.go index 01784fadf..2288f2a62 100644 --- a/api/user_test.go +++ b/api/user_test.go @@ -78,6 +78,12 @@ func TestCreateUser(t *testing.T) { } } + user.Username = "1" + user.Username + user.Email = strings.ToLower("success+"+model.NewId()) + "@simulator.amazonses.com" + if _, err := Client.CreateUser(&user, ""); err == nil { + t.Fatal("should have been an error - username must start with letter") + } + if _, err := Client.DoApiPost("/users/create", "garbage"); err == nil { t.Fatal("should have been an error") } @@ -172,7 +178,7 @@ func TestLogin(t *testing.T) { Client.AuthToken = "" - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} if _, err := Client.CreateUserFromSignup(&user2, "junk", "1231312"); err == nil { t.Fatal("Should have errored, signed up without hashed email") @@ -354,17 +360,17 @@ func TestGetUser(t *testing.T) { Client.Logout() - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser, _ := Client.CreateUser(&user, "") LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: "Corey", LastName: "Hulen"} + user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: "Corey", LastName: "Hulen", Username: "n" + model.NewId()} ruser2, _ := Client.CreateUser(&user2, "") LinkUserToTeam(ruser2.Data.(*model.User), rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser2.Data.(*model.User).Id)) - user3 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user3 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser3, _ := Client.CreateUser(&user3, "") LinkUserToTeam(ruser3.Data.(*model.User), rteam2.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser3.Data.(*model.User).Id)) @@ -619,7 +625,7 @@ func TestGetAudits(t *testing.T) { Client.Logout() - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser, _ := Client.CreateUser(&user, "") LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) @@ -674,7 +680,7 @@ func TestUserCreateImage(t *testing.T) { team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -721,7 +727,7 @@ func TestUserUploadProfileImage(t *testing.T) { Client.Logout() - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -832,7 +838,7 @@ func TestUserUpdate(t *testing.T) { Client.Logout() - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Roles: ""} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Roles: "", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -862,7 +868,7 @@ func TestUserUpdate(t *testing.T) { } } - user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) LinkUserToTeam(user2, team) store.Must(app.Srv.Store.User().VerifyEmail(user2.Id)) @@ -887,7 +893,7 @@ func TestUserUpdatePassword(t *testing.T) { Client.Logout() Client.SetTeamId(team.Id) - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -951,7 +957,7 @@ func TestUserUpdatePassword(t *testing.T) { t.Fatal("Should have errored") } - user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) LinkUserToTeam(user2, team) @@ -971,12 +977,12 @@ func TestUserUpdateRoles(t *testing.T) { Client.Logout() - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) - user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) LinkUserToTeam(user2, team) store.Must(app.Srv.Store.User().VerifyEmail(user2.Id)) @@ -995,7 +1001,7 @@ func TestUserUpdateRoles(t *testing.T) { team2 := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} team2 = Client.Must(Client.CreateTeam(team2)).Data.(*model.Team) - user3 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user3 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user3 = Client.Must(Client.CreateUser(user3, "")).Data.(*model.User) LinkUserToTeam(user3, team2) store.Must(app.Srv.Store.User().VerifyEmail(user3.Id)) @@ -1090,7 +1096,7 @@ func TestUserUpdateDeviceId(t *testing.T) { team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -1121,7 +1127,7 @@ func TestUserUpdateDeviceId2(t *testing.T) { team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -1158,12 +1164,12 @@ func TestUserUpdateActive(t *testing.T) { Client.Logout() - user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) - user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) LinkUserToTeam(user2, team) store.Must(app.Srv.Store.User().VerifyEmail(user2.Id)) @@ -1181,7 +1187,7 @@ func TestUserUpdateActive(t *testing.T) { Client.Must(Client.Logout()) - user3 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user3 := &model.User{Email: "success+" + model.NewId() + "@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user3 = Client.Must(Client.CreateUser(user3, "")).Data.(*model.User) LinkUserToTeam(user2, team2) store.Must(app.Srv.Store.User().VerifyEmail(user3.Id)) @@ -1224,7 +1230,7 @@ func TestUserPermDelete(t *testing.T) { team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - user1 := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user1 := &model.User{Email: model.NewId() + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user1 = Client.Must(Client.CreateUser(user1, "")).Data.(*model.User) LinkUserToTeam(user1, team) store.Must(app.Srv.Store.User().VerifyEmail(user1.Id)) @@ -1266,7 +1272,7 @@ func TestSendPasswordReset(t *testing.T) { team := &model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} team = Client.Must(Client.CreateTeam(team)).Data.(*model.Team) - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -1291,7 +1297,7 @@ func TestSendPasswordReset(t *testing.T) { } authData := model.NewId() - user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", AuthData: &authData, AuthService: "random"} + user2 := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", AuthData: &authData, AuthService: "random", Username: "n" + model.NewId()} user2 = Client.Must(Client.CreateUser(user2, "")).Data.(*model.User) LinkUserToTeam(user2, team) store.Must(app.Srv.Store.User().VerifyEmail(user2.Id)) @@ -1306,7 +1312,7 @@ func TestResetPassword(t *testing.T) { Client := th.SystemAdminClient team := th.SystemAdminTeam - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -1396,7 +1402,7 @@ func TestUserUpdateNotify(t *testing.T) { Client.Logout() - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Roles: ""} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Roles: "", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, team) store.Must(app.Srv.Store.User().VerifyEmail(user.Id)) @@ -1491,7 +1497,7 @@ func TestFuzzyUserCreate(t *testing.T) { testEmail = utils.FUZZY_STRINGS_EMAILS[i] } - user := model.User{Email: strings.ToLower(model.NewId()) + testEmail, Nickname: testName, Password: "hello1"} + user := model.User{Email: strings.ToLower(model.NewId()) + testEmail, Nickname: testName, Password: "hello1", Username: "n" + model.NewId()} ruser, err := Client.CreateUser(&user, "") if err != nil { @@ -1511,7 +1517,7 @@ func TestEmailToOAuth(t *testing.T) { Client.Logout() - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) LinkUserToTeam(ruser, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Id)) @@ -1564,12 +1570,12 @@ func TestOAuthToEmail(t *testing.T) { Client.Logout() - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) LinkUserToTeam(ruser, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Id)) - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser2 := Client.Must(Client.CreateUser(&user2, "")).Data.(*model.User) LinkUserToTeam(ruser2, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser2.Id)) @@ -1615,7 +1621,7 @@ func TestLDAPToEmail(t *testing.T) { team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} rteam, _ := Client.CreateTeam(&team) - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) LinkUserToTeam(ruser, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Id)) @@ -1668,7 +1674,7 @@ func TestEmailToLDAP(t *testing.T) { team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} rteam, _ := Client.CreateTeam(&team) - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) LinkUserToTeam(ruser, rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Id)) @@ -1799,7 +1805,7 @@ func TestGenerateMfaSecret(t *testing.T) { team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} rteam, _ := Client.CreateTeam(&team) - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser, _ := Client.CreateUser(&user, "") LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) @@ -1840,7 +1846,7 @@ func TestUpdateMfa(t *testing.T) { team := model.Team{DisplayName: "Name", Name: "z-z-" + model.NewId() + "a", Email: "test@nowhere.com", Type: model.TEAM_OPEN} rteam, _ := Client.CreateTeam(&team) - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser, _ := Client.CreateUser(&user, "") LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) @@ -1881,7 +1887,7 @@ func TestCheckMfa(t *testing.T) { Client.Logout() - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} ruser, _ := Client.CreateUser(&user, "") LinkUserToTeam(ruser.Data.(*model.User), rteam.Data.(*model.Team)) store.Must(app.Srv.Store.User().VerifyEmail(ruser.Data.(*model.User).Id)) @@ -2048,7 +2054,7 @@ func TestGetProfilesInChannel(t *testing.T) { } } - user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} Client.Must(Client.CreateUser(&user, "")) Client.Login(user.Email, "passwd1") @@ -2094,7 +2100,7 @@ func TestGetProfilesNotInChannel(t *testing.T) { } } - user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} user = Client.Must(Client.CreateUser(user, "")).Data.(*model.User) LinkUserToTeam(user, th.BasicTeam) @@ -2132,7 +2138,7 @@ func TestGetProfilesNotInChannel(t *testing.T) { } } - user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1"} + user2 := model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", Username: "n" + model.NewId()} Client.Must(Client.CreateUser(&user2, "")) Client.Login(user2.Email, "passwd1") @@ -2297,7 +2303,7 @@ func TestSearchUsers(t *testing.T) { utils.Cfg.PrivacySettings.ShowFullName = false privacyEmailPrefix := strings.ToLower(model.NewId()) - privacyUser := &model.User{Email: privacyEmailPrefix + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers"} + privacyUser := &model.User{Email: privacyEmailPrefix + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers", Username: "n" + model.NewId()} privacyUser = Client.Must(Client.CreateUser(privacyUser, "")).Data.(*model.User) LinkUserToTeam(privacyUser, th.BasicTeam) @@ -2532,7 +2538,7 @@ func TestAutocompleteUsers(t *testing.T) { }() utils.Cfg.PrivacySettings.ShowFullName = false - privacyUser := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers"} + privacyUser := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers", Username: "n" + model.NewId()} privacyUser = Client.Must(Client.CreateUser(privacyUser, "")).Data.(*model.User) LinkUserToTeam(privacyUser, th.BasicTeam) diff --git a/api4/user_test.go b/api4/user_test.go index c83bc98a9..c03169c72 100644 --- a/api4/user_test.go +++ b/api4/user_test.go @@ -58,6 +58,12 @@ func TestCreateUser(t *testing.T) { CheckErrorMessage(t, resp, "model.user.is_valid.email.app_error") CheckBadRequestStatus(t, resp) + ruser.Email = GenerateTestEmail() + ruser.Username = "1" + user.Username + _, resp = Client.CreateUser(ruser) + CheckErrorMessage(t, resp, "model.user.is_valid.username.app_error") + CheckBadRequestStatus(t, resp) + if r, err := Client.DoApiPost("/users", "garbage"); err == nil { t.Fatal("should have errored") } else { diff --git a/app/import_test.go b/app/import_test.go index 165c94875..8867fbec1 100644 --- a/app/import_test.go +++ b/app/import_test.go @@ -837,7 +837,7 @@ func TestImportImportUser(t *testing.T) { // Do an invalid user in dry-run mode. data := UserImportData{ - Username: ptrStr(model.NewId()), + Username: ptrStr("n" + model.NewId()), } if err := ImportUser(&data, true); err == nil { t.Fatalf("Should have failed to import invalid user.") @@ -854,7 +854,7 @@ func TestImportImportUser(t *testing.T) { // Do a valid user in dry-run mode. data = UserImportData{ - Username: ptrStr(model.NewId()), + Username: ptrStr("n" + model.NewId()), Email: ptrStr(model.NewId() + "@example.com"), } if err := ImportUser(&data, true); err != nil { @@ -888,7 +888,7 @@ func TestImportImportUser(t *testing.T) { } // Do a valid user in apply mode. - username := model.NewId() + username := "n" + model.NewId() data = UserImportData{ Username: &username, Email: ptrStr(model.NewId() + "@example.com"), @@ -1023,7 +1023,7 @@ func TestImportImportUser(t *testing.T) { t.Fatalf("Failed to get channel from database.") } - username = model.NewId() + username = "n" + model.NewId() data = UserImportData{ Username: &username, Email: ptrStr(model.NewId() + "@example.com"), @@ -1312,7 +1312,7 @@ func TestImportImportUser(t *testing.T) { } // Add a user with some preferences. - username = model.NewId() + username = "n" + model.NewId() data = UserImportData{ Username: &username, Email: ptrStr(model.NewId() + "@example.com"), @@ -1476,7 +1476,7 @@ func TestImportImportPost(t *testing.T) { } // Create a user. - username := model.NewId() + username := "n" + model.NewId() ImportUser(&UserImportData{ Username: &username, Email: ptrStr(model.NewId() + "@example.com"), @@ -1724,7 +1724,7 @@ func TestImportBulkImport(t *testing.T) { teamName := model.NewId() channelName := model.NewId() - username := model.NewId() + username := "n" + model.NewId() // Run bulk import with a valid 1 of everything. data1 := `{"type": "version", "version": 1} diff --git a/app/user_test.go b/app/user_test.go index 8979af7d7..ec0e2b73c 100644 --- a/app/user_test.go +++ b/app/user_test.go @@ -5,9 +5,9 @@ package app import ( "bytes" + "encoding/json" "image" "image/color" - "encoding/json" "math/rand" "strings" "testing" @@ -67,7 +67,7 @@ func TestCheckUserDomain(t *testing.T) { func TestCreateOAuthUser(t *testing.T) { th := Setup().InitBasic() r := rand.New(rand.NewSource(time.Now().UnixNano())) - glUser := oauthgitlab.GitLabUser{Id: int64(r.Intn(1000)), Username: model.NewId(), Email: model.NewId() + "@simulator.amazonses.com", Name: "Joram Wilander"} + glUser := oauthgitlab.GitLabUser{Id: int64(r.Intn(1000)), Username: "joram" + model.NewId(), Email: model.NewId() + "@simulator.amazonses.com", Name: "Joram Wilander"} json := glUser.ToJson() user, err := CreateOAuthUser(model.USER_AUTH_SERVICE_GITLAB, strings.NewReader(json), th.BasicTeam.Id) diff --git a/model/user.go b/model/user.go index 2412c2ec7..f380a7550 100644 --- a/model/user.go +++ b/model/user.go @@ -10,6 +10,7 @@ import ( "net/http" "regexp" "strings" + "unicode" "unicode/utf8" "golang.org/x/crypto/bcrypt" @@ -142,7 +143,7 @@ func (u *User) PreSave() { } if u.Username == "" { - u.Username = NewId() + u.Username = "n" + NewId() } if u.AuthData != nil && *u.AuthData == "" { @@ -572,6 +573,10 @@ func IsValidUsername(s string) bool { return false } + if !unicode.IsLetter(rune(s[0])) { + return false + } + for _, restrictedUsername := range restrictedUsernames { if s == restrictedUsername { return false diff --git a/model/user_test.go b/model/user_test.go index 4f5c16614..542d15e5d 100644 --- a/model/user_test.go +++ b/model/user_test.go @@ -95,7 +95,7 @@ func TestUserIsValid(t *testing.T) { t.Fatal() } - user.Username = NewId() + user.Username = "n" + NewId() user.Email = strings.Repeat("01234567890", 20) if err := user.IsValid(); err == nil { t.Fatal() @@ -189,6 +189,10 @@ var usernames = []struct { expected bool }{ {"spin-punch", true}, + {"sp", false}, + {"1spin-punch", false}, + {"-spin-punch", false}, + {".spin-punch", false}, {"Spin-punch", false}, {"spin punch-", false}, {"spin_punch", true}, diff --git a/store/sql_compliance_store_test.go b/store/sql_compliance_store_test.go index b7b270a42..25b6f2dce 100644 --- a/store/sql_compliance_store_test.go +++ b/store/sql_compliance_store_test.go @@ -59,13 +59,13 @@ func TestComplianceExport(t *testing.T) { u1 := &model.User{} u1.Email = model.NewId() - u1.Username = model.NewId() + u1.Username = "n" + model.NewId() u1 = Must(store.User().Save(u1)).(*model.User) Must(store.Team().SaveMember(&model.TeamMember{TeamId: t1.Id, UserId: u1.Id})) u2 := &model.User{} u2.Email = model.NewId() - u2.Username = model.NewId() + u2.Username = "n" + model.NewId() u2 = Must(store.User().Save(u2)).(*model.User) Must(store.Team().SaveMember(&model.TeamMember{TeamId: t1.Id, UserId: u2.Id})) diff --git a/store/sql_team_store_test.go b/store/sql_team_store_test.go index 62efa4d1a..58ac74fc0 100644 --- a/store/sql_team_store_test.go +++ b/store/sql_team_store_test.go @@ -145,10 +145,12 @@ func TestTeamStoreSearchByName(t *testing.T) { t.Fatal(err) } - if r1 := <-store.Team().SearchByName("zzz"); r1.Err != nil { + if r1 := <-store.Team().SearchByName(o1.Name); r1.Err != nil { t.Fatal(r1.Err) } else { if r1.Data.([]*model.Team)[0].ToJson() != o1.ToJson() { + t.Log(r1.Data.([]*model.Team)[0].ToJson()) + t.Log(o1.ToJson()) t.Fatal("invalid returned team") } } diff --git a/store/sql_user_store_test.go b/store/sql_user_store_test.go index e509653c1..104735455 100644 --- a/store/sql_user_store_test.go +++ b/store/sql_user_store_test.go @@ -18,7 +18,7 @@ func TestUserStoreSave(t *testing.T) { u1 := model.User{} u1.Email = model.NewId() - u1.Username = model.NewId() + u1.Username = "n" + model.NewId() if err := (<-store.User().Save(&u1)).Err; err != nil { t.Fatal("couldn't save user", err) @@ -49,7 +49,7 @@ func TestUserStoreSave(t *testing.T) { for i := 0; i < 50; i++ { u1.Id = "" u1.Email = model.NewId() - u1.Username = model.NewId() + u1.Username = "n" + model.NewId() if err := (<-store.User().Save(&u1)).Err; err != nil { t.Fatal("couldn't save item", err) } @@ -59,7 +59,7 @@ func TestUserStoreSave(t *testing.T) { u1.Id = "" u1.Email = model.NewId() - u1.Username = model.NewId() + u1.Username = "n" + model.NewId() if err := (<-store.User().Save(&u1)).Err; err != nil { t.Fatal("couldn't save item", err) } @@ -821,7 +821,7 @@ func TestUserStoreGetByUsername(t *testing.T) { u1 := &model.User{} u1.Email = model.NewId() - u1.Username = model.NewId() + u1.Username = "n" + model.NewId() Must(store.User().Save(u1)) Must(store.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u1.Id})) @@ -841,7 +841,7 @@ func TestUserStoreGetForLogin(t *testing.T) { u1 := &model.User{ Email: model.NewId(), - Username: model.NewId(), + Username: "n" + model.NewId(), AuthService: model.USER_AUTH_SERVICE_GITLAB, AuthData: &auth, } @@ -851,7 +851,7 @@ func TestUserStoreGetForLogin(t *testing.T) { u2 := &model.User{ Email: model.NewId(), - Username: model.NewId(), + Username: "n" + model.NewId(), AuthService: model.USER_AUTH_SERVICE_LDAP, AuthData: &auth2, } @@ -898,7 +898,7 @@ func TestUserStoreGetForLogin(t *testing.T) { // test a special case where two users will have conflicting login information so we throw a special error u3 := &model.User{ Email: model.NewId(), - Username: model.NewId(), + Username: "n" + model.NewId(), AuthService: model.USER_AUTH_SERVICE_LDAP, AuthData: &auth3, } @@ -906,7 +906,7 @@ func TestUserStoreGetForLogin(t *testing.T) { u4 := &model.User{ Email: model.NewId(), - Username: model.NewId(), + Username: "n" + model.NewId(), AuthService: model.USER_AUTH_SERVICE_LDAP, AuthData: &u3.Username, } @@ -1547,12 +1547,12 @@ func TestUserStoreAnalyticsGetSystemAdminCount(t *testing.T) { u1 := model.User{} u1.Email = model.NewId() - u1.Username = model.NewId() + u1.Username = "n" + model.NewId() u1.Roles = "system_user system_admin" u2 := model.User{} u2.Email = model.NewId() - u2.Username = model.NewId() + u2.Username = "n" + model.NewId() if err := (<-store.User().Save(&u1)).Err; err != nil { t.Fatal("couldn't save user", err) -- cgit v1.2.3-1-g7c22