diff options
author | prixone <prixone@users.noreply.github.com> | 2017-03-29 22:05:32 -0300 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-03-29 21:05:32 -0400 |
commit | 8b868828bfe769e65bdda49091be2161b19d5ceb (patch) | |
tree | b3a33a6f1b5f705e0f68ab2072e41c5ffef933b5 | |
parent | 8d36a1e96a12ba51bb95168f7deed797d53c266e (diff) | |
download | chat-8b868828bfe769e65bdda49091be2161b19d5ceb.tar.gz chat-8b868828bfe769e65bdda49091be2161b19d5ceb.tar.bz2 chat-8b868828bfe769e65bdda49091be2161b19d5ceb.zip |
PLT 6125 Allow system admins to create users on closed servers (#5908)
* Update user.go
Added method to create user accounts using a privileged system_admin account
* Update user.go
Added respective method to handle the the APIv4 call to create users with privileged account(system_admin) by passing server restrictions of EnableUserCreation and/or EnableOpenServer set to false.
* Update user_test.go
Added test case
-rw-r--r-- | api4/user.go | 2 | ||||
-rw-r--r-- | api4/user_test.go | 16 | ||||
-rw-r--r-- | app/user.go | 13 |
3 files changed, 30 insertions, 1 deletions
diff --git a/api4/user.go b/api4/user.go index 66f1b7a88..4eb4479c2 100644 --- a/api4/user.go +++ b/api4/user.go @@ -72,6 +72,8 @@ func createUser(c *Context, w http.ResponseWriter, r *http.Request) { ruser, err = app.CreateUserWithHash(user, hash, r.URL.Query().Get("d"), c.GetSiteURL()) } else if len(inviteId) > 0 { ruser, err = app.CreateUserWithInviteId(user, inviteId, c.GetSiteURL()) + } else if c.IsSystemAdmin() { + ruser, err = app.CreateUserAsAdmin(user, c.GetSiteURL()) } else { ruser, err = app.CreateUserFromSignup(user, c.GetSiteURL()) } diff --git a/api4/user_test.go b/api4/user_test.go index 10c0a22d8..fe53229a5 100644 --- a/api4/user_test.go +++ b/api4/user_test.go @@ -15,9 +15,10 @@ import ( ) func TestCreateUser(t *testing.T) { - th := Setup().InitBasic() + th := Setup().InitBasic().InitSystemAdmin() defer TearDown() Client := th.Client + AdminClient := th.SystemAdminClient user := model.User{Email: GenerateTestEmail(), Nickname: "Corey Hulen", Password: "hello1", Username: GenerateTestUsername(), Roles: model.ROLE_SYSTEM_ADMIN.Id + " " + model.ROLE_SYSTEM_USER.Id} @@ -64,6 +65,19 @@ func TestCreateUser(t *testing.T) { CheckErrorMessage(t, resp, "model.user.is_valid.username.app_error") CheckBadRequestStatus(t, resp) + openServer := *utils.Cfg.TeamSettings.EnableOpenServer + canCreateAccount := utils.Cfg.TeamSettings.EnableUserCreation + defer func() { + *utils.Cfg.TeamSettings.EnableOpenServer = openServer + utils.Cfg.TeamSettings.EnableUserCreation = canCreateAccount + }() + *utils.Cfg.TeamSettings.EnableOpenServer = false + utils.Cfg.TeamSettings.EnableUserCreation = false + + user2 := &model.User{Email: GenerateTestEmail(), Password: "Password1", Username: GenerateTestUsername()} + _, resp = AdminClient.CreateUser(user2) + CheckNoError(t, resp) + if r, err := Client.DoApiPost("/users", "garbage"); err == nil { t.Fatal("should have errored") } else { diff --git a/app/user.go b/app/user.go index 850b26f1b..40651f56a 100644 --- a/app/user.go +++ b/app/user.go @@ -105,6 +105,19 @@ func CreateUserWithInviteId(user *model.User, inviteId string, siteURL string) ( return ruser, nil } +func CreateUserAsAdmin(user *model.User, siteURL string) (*model.User, *model.AppError) { + ruser, err := CreateUser(user) + if err != nil { + return nil, err + } + + if err := SendWelcomeEmail(ruser.Id, ruser.Email, ruser.EmailVerified, ruser.Locale, siteURL); err != nil { + l4g.Error(err.Error()) + } + + return ruser, nil +} + func CreateUserFromSignup(user *model.User, siteURL string) (*model.User, *model.AppError) { if err := IsUserSignUpAllowed(); err != nil { return nil, err |