github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/app/auto_users.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package app 5 6 import ( 7 "github.com/mattermost/mattermost-server/model" 8 "github.com/mattermost/mattermost-server/store" 9 "github.com/mattermost/mattermost-server/utils" 10 11 l4g "github.com/alecthomas/log4go" 12 ) 13 14 type AutoUserCreator struct { 15 app *App 16 client *model.Client 17 team *model.Team 18 EmailLength utils.Range 19 EmailCharset string 20 NameLength utils.Range 21 NameCharset string 22 Fuzzy bool 23 } 24 25 func NewAutoUserCreator(a *App, client *model.Client, team *model.Team) *AutoUserCreator { 26 return &AutoUserCreator{ 27 app: a, 28 client: client, 29 team: team, 30 EmailLength: USER_EMAIL_LEN, 31 EmailCharset: utils.LOWERCASE, 32 NameLength: USER_NAME_LEN, 33 NameCharset: utils.LOWERCASE, 34 Fuzzy: false, 35 } 36 } 37 38 // Basic test team and user so you always know one 39 func (a *App) CreateBasicUser(client *model.Client) *model.AppError { 40 result, _ := client.FindTeamByName(BTEST_TEAM_NAME) 41 if !result.Data.(bool) { 42 newteam := &model.Team{DisplayName: BTEST_TEAM_DISPLAY_NAME, Name: BTEST_TEAM_NAME, Email: BTEST_TEAM_EMAIL, Type: BTEST_TEAM_TYPE} 43 result, err := client.CreateTeam(newteam) 44 if err != nil { 45 return err 46 } 47 basicteam := result.Data.(*model.Team) 48 newuser := &model.User{Email: BTEST_USER_EMAIL, Nickname: BTEST_USER_NAME, Password: BTEST_USER_PASSWORD} 49 result, err = client.CreateUser(newuser, "") 50 if err != nil { 51 return err 52 } 53 ruser := result.Data.(*model.User) 54 store.Must(a.Srv.Store.User().VerifyEmail(ruser.Id)) 55 store.Must(a.Srv.Store.Team().SaveMember(&model.TeamMember{TeamId: basicteam.Id, UserId: ruser.Id}, *a.Config().TeamSettings.MaxUsersPerTeam)) 56 } 57 return nil 58 } 59 60 func (cfg *AutoUserCreator) createRandomUser() (*model.User, bool) { 61 var userEmail string 62 var userName string 63 if cfg.Fuzzy { 64 userEmail = "success+" + model.NewId() + "@simulator.amazonses.com" 65 userName = utils.FuzzName() 66 } else { 67 userEmail = "success+" + model.NewId() + "@simulator.amazonses.com" 68 userName = utils.RandomName(cfg.NameLength, cfg.NameCharset) 69 } 70 71 user := &model.User{ 72 Email: userEmail, 73 Nickname: userName, 74 Password: USER_PASSWORD} 75 76 result, err := cfg.client.CreateUserWithInvite(user, "", "", cfg.team.InviteId) 77 if err != nil { 78 l4g.Error(err.Error()) 79 return nil, false 80 } 81 82 ruser := result.Data.(*model.User) 83 84 status := &model.Status{UserId: ruser.Id, Status: model.STATUS_ONLINE, Manual: false, LastActivityAt: model.GetMillis(), ActiveChannel: ""} 85 if result := <-cfg.app.Srv.Store.Status().SaveOrUpdate(status); result.Err != nil { 86 l4g.Error(result.Err.Error()) 87 return nil, false 88 } 89 90 // We need to cheat to verify the user's email 91 store.Must(cfg.app.Srv.Store.User().VerifyEmail(ruser.Id)) 92 93 return result.Data.(*model.User), true 94 } 95 96 func (cfg *AutoUserCreator) CreateTestUsers(num utils.Range) ([]*model.User, bool) { 97 numUsers := utils.RandIntFromRange(num) 98 users := make([]*model.User, numUsers) 99 100 for i := 0; i < numUsers; i++ { 101 var err bool 102 users[i], err = cfg.createRandomUser() 103 if !err { 104 return users, false 105 } 106 } 107 108 return users, true 109 }