Files

124 lines
3.4 KiB
Go
Raw Permalink Normal View History

2015-12-17 02:28:47 -05:00
// Copyright 2015 The Gogs Authors. All rights reserved.
2019-01-24 04:00:19 +05:30
// Copyright 2019 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2015-12-17 02:28:47 -05:00
package admin
import (
2019-12-20 18:07:12 +01:00
"net/http"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/organization"
user_model "code.gitea.io/gitea/models/user"
2019-08-23 09:40:30 -07:00
api "code.gitea.io/gitea/modules/structs"
2021-01-26 23:36:53 +08:00
"code.gitea.io/gitea/modules/web"
2020-01-24 19:00:29 +00:00
"code.gitea.io/gitea/routers/api/v1/utils"
"code.gitea.io/gitea/services/context"
2022-12-29 03:57:15 +01:00
"code.gitea.io/gitea/services/convert"
2015-12-17 02:28:47 -05:00
)
2016-11-24 15:04:31 +08:00
// CreateOrg api for create organization
2021-01-26 23:36:53 +08:00
func CreateOrg(ctx *context.APIContext) {
2017-11-12 23:02:25 -08:00
// swagger:operation POST /admin/users/{username}/orgs admin adminCreateOrg
// ---
// summary: Create an organization
// consumes:
// - application/json
// produces:
// - application/json
// parameters:
// - name: username
// in: path
// description: username of the user who will own the created organization
2017-11-12 23:02:25 -08:00
// type: string
// required: true
// - name: organization
// in: body
// required: true
// schema: { "$ref": "#/definitions/CreateOrgOption" }
2017-11-12 23:02:25 -08:00
// responses:
// "201":
// "$ref": "#/responses/Organization"
// "403":
// "$ref": "#/responses/forbidden"
// "422":
// "$ref": "#/responses/validationError"
2021-01-26 23:36:53 +08:00
form := web.GetForm(ctx).(*api.CreateOrgOption)
2015-12-17 02:28:47 -05:00
2019-05-30 13:57:55 -04:00
visibility := api.VisibleTypePublic
if form.Visibility != "" {
visibility = api.VisibilityModes[form.Visibility]
}
org := &organization.Organization{
2015-12-17 02:28:47 -05:00
Name: form.UserName,
FullName: form.FullName,
Description: form.Description,
Website: form.Website,
Location: form.Location,
IsActive: true,
Type: user_model.UserTypeOrganization,
2019-05-30 13:57:55 -04:00
Visibility: visibility,
2015-12-17 02:28:47 -05:00
}
2019-05-30 13:57:55 -04:00
if err := organization.CreateOrganization(ctx, org, ctx.ContextUser); err != nil {
if user_model.IsErrUserAlreadyExist(err) ||
db.IsErrNameReserved(err) ||
db.IsErrNameCharsNotAllowed(err) ||
db.IsErrNamePatternNotAllowed(err) {
2025-02-17 14:13:17 +08:00
ctx.APIError(http.StatusUnprocessableEntity, err)
2015-12-17 02:28:47 -05:00
} else {
2025-02-18 04:41:03 +08:00
ctx.APIErrorInternal(err)
2015-12-17 02:28:47 -05:00
}
return
}
ctx.JSON(http.StatusCreated, convert.ToOrganization(ctx, org))
2015-12-17 02:28:47 -05:00
}
2019-01-24 04:00:19 +05:30
2022-01-20 18:46:10 +01:00
// GetAllOrgs API for getting information of all the organizations
2019-01-24 04:00:19 +05:30
func GetAllOrgs(ctx *context.APIContext) {
// swagger:operation GET /admin/orgs admin adminGetAllOrgs
// ---
// summary: List all organizations
// produces:
// - application/json
// parameters:
// - name: page
// in: query
// description: page number of results to return (1-based)
// type: integer
// - name: limit
// in: query
// description: page size of results
// type: integer
2019-01-24 04:00:19 +05:30
// responses:
// "200":
// "$ref": "#/responses/OrganizationList"
// "403":
// "$ref": "#/responses/forbidden"
2019-12-20 18:07:12 +01:00
listOptions := utils.GetListOptions(ctx)
users, maxResults, err := user_model.SearchUsers(ctx, user_model.SearchUserOptions{
2022-03-22 08:03:22 +01:00
Actor: ctx.Doer,
Types: []user_model.UserType{user_model.UserTypeOrganization},
OrderBy: db.SearchOrderByAlphabetically,
ListOptions: listOptions,
2020-01-24 19:00:29 +00:00
Visible: []api.VisibleType{api.VisibleTypePublic, api.VisibleTypeLimited, api.VisibleTypePrivate},
2019-01-24 04:00:19 +05:30
})
if err != nil {
2025-02-18 04:41:03 +08:00
ctx.APIErrorInternal(err)
2019-01-24 04:00:19 +05:30
return
}
orgs := make([]*api.Organization, len(users))
for i := range users {
orgs[i] = convert.ToOrganization(ctx, organization.OrgFromUser(users[i]))
2019-01-24 04:00:19 +05:30
}
2026-03-08 15:35:50 +01:00
ctx.SetLinkHeader(maxResults, listOptions.PageSize)
2021-08-12 14:43:08 +02:00
ctx.SetTotalCountHeader(maxResults)
2019-12-20 18:07:12 +01:00
ctx.JSON(http.StatusOK, &orgs)
2019-01-24 04:00:19 +05:30
}