func EnsureAdminUser() { statsQuery := m.GetSystemStatsQuery{} if err := bus.Dispatch(&statsQuery); err != nil { log.Fatal(3, "Could not determine if admin user exists: %v", err) return } if statsQuery.Result.UserCount > 0 { return } cmd := m.CreateUserCommand{} cmd.Login = setting.AdminUser cmd.Email = setting.AdminUser + "@localhost" cmd.Password = setting.AdminPassword cmd.IsAdmin = true if err := bus.Dispatch(&cmd); err != nil { log.Error(3, "Failed to create default admin user", err) return } system := m.AddSystemsCommand{} system.OrgId = cmd.Result.OrgId system.SystemsName = []string{"Cloudwiz"} if err := bus.Dispatch(&system); err != nil { log.Error(3, "Failed to create defalut system for admin", err) return } log.Info("Created default Cloudwiz system") log.Info("Created default admin user: %v", setting.AdminUser) }
func AdminCreateUser(c *middleware.Context, form dtos.AdminCreateUserForm) { cmd := m.CreateUserCommand{ Login: form.Login, Email: form.Email, Password: form.Password, Name: form.Name, } if len(cmd.Login) == 0 { cmd.Login = cmd.Email if len(cmd.Login) == 0 { c.JsonApiErr(400, "Validation error, need specify either username or email", nil) return } } if len(cmd.Password) < 4 { c.JsonApiErr(400, "Password is missing or too short", nil) return } if err := bus.Dispatch(&cmd); err != nil { c.JsonApiErr(500, "failed to create user", err) return } metrics.M_Api_Admin_User_Create.Inc(1) c.JsonOK("User created") }
func getCreateUserCommandForProxyAuth(headerVal string) *m.CreateUserCommand { cmd := m.CreateUserCommand{} if setting.AuthProxyHeaderProperty == "username" { cmd.Login = headerVal cmd.Email = headerVal } else if setting.AuthProxyHeaderProperty == "email" { cmd.Email = headerVal cmd.Login = headerVal } else { panic("Auth proxy header property invalid") } return &cmd }
func CreateUser(cmd *m.CreateUserCommand) error { return inTransaction2(func(sess *session) error { orgId, err := getOrgIdForNewUser(cmd, sess) if err != nil { return err } if cmd.Email == "" { cmd.Email = cmd.Login } // create user user := m.User{ Email: cmd.Email, Name: cmd.Name, Login: cmd.Login, IsAdmin: cmd.IsAdmin, OrgId: orgId, EmailVerified: cmd.EmailVerified, Theme: "light", Created: time.Now(), Updated: time.Now(), } if len(cmd.Password) > 0 { user.Salt = util.GetRandomString(10) user.Rands = util.GetRandomString(10) user.Password = util.EncodePassword(cmd.Password, user.Salt) } sess.UseBool("is_admin") if _, err := sess.Insert(&user); err != nil { return err } sess.publishAfterCommit(&events.UserCreated{ Timestamp: user.Created, Id: user.Id, Name: user.Name, Login: user.Login, Email: user.Email, }) cmd.Result = user // create org user link if !cmd.SkipOrgSetup { orgUser := m.OrgUser{ OrgId: orgId, UserId: user.Id, Role: m.ROLE_ADMIN, Created: time.Now(), Updated: time.Now(), } if setting.AutoAssignOrg && !user.IsAdmin { orgUser.Role = m.RoleType(setting.AutoAssignOrgRole) } if _, err = sess.Insert(&orgUser); err != nil { return err } } return nil }) }
func SignUpStep2(c *middleware.Context, form dtos.SignUpStep2Form) Response { if !setting.AllowUserSignUp { return ApiError(401, "User signup is disabled", nil) } createUserCmd := m.CreateUserCommand{ Email: form.Email, Login: form.Username, Name: form.Name, Password: form.Password, OrgName: form.OrgName, } // verify email if setting.VerifyEmailEnabled { if ok, rsp := verifyUserSignUpEmail(form.Email, form.Code); !ok { return rsp } createUserCmd.EmailVerified = true } // check if user exists existing_user := m.GetUserByLoginQuery{LoginOrEmail: form.Email} if err := bus.Dispatch(&existing_user); err == nil { return ApiError(401, "User with same email address already exists", nil) } // check if org exists existing_org := m.GetOrgByNameQuery{Name: form.OrgName} if err := bus.Dispatch(&existing_org); err == nil { return ApiError(500, "Organization with same name already exists", nil) } // Note that: the new org is also created together with this signup user (auto_assign_org = false) // dispatch create command if err := bus.Dispatch(&createUserCmd); err != nil { return ApiError(500, "Failed to create user", err) } // publish signup event user := &createUserCmd.Result bus.Publish(&events.SignUpCompleted{ Email: user.Email, Name: user.NameOrFallback(), }) // mark temp user as completed if ok, rsp := updateTempUserStatus(form.Code, m.TmpUserCompleted); !ok { return rsp } // check for pending invites invitesQuery := m.GetTempUsersQuery{Email: form.Email, Status: m.TmpUserInvitePending} if err := bus.Dispatch(&invitesQuery); err != nil { return ApiError(500, "Failed to query database for invites", err) } apiResponse := util.DynMap{"message": "User sign up completed succesfully", "code": "redirect-to-landing-page"} for _, invite := range invitesQuery.Result { if ok, rsp := applyUserInvite(user, invite, false); !ok { return rsp } apiResponse["code"] = "redirect-to-select-org" } loginUserWithUser(user, c) metrics.M_Api_User_SignUpCompleted.Inc(1) // We need to add the data source defined in config for this org to data_source table if err := sqlstore.AddDatasourceForOrg(user.OrgId); err != nil { return ApiError(500, fmt.Sprintf("Failed to add data source for organization %v", user.OrgId), err) } return Json(200, apiResponse) }