// POST /api/orgs func CreateOrg(c *middleware.Context, cmd m.CreateOrgCommand) Response { if !c.IsSignedIn || (!setting.AllowUserOrgCreate && !c.IsGrafanaAdmin) { return ApiError(403, "Access denied", nil) } cmd.UserId = c.UserId if err := bus.Dispatch(&cmd); err != nil { if err == m.ErrOrgNameTaken { return ApiError(400, "Organization name taken", err) } return ApiError(500, "Failed to create organization", err) } metrics.M_Api_Org_Create.Inc(1) // We need to add the data source defined in config for this org to data_source table if err := sqlstore.AddDatasourceForOrg(cmd.Result.Id); err != nil { return ApiError(500, "Failed to add data source for organization", err) } return Json(200, &util.DynMap{ "orgId": cmd.Result.Id, "message": "Organization created", }) }
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) }