code.gitea.io/gitea@v1.21.7/routers/api/v1/admin/org.go (about) 1 // Copyright 2015 The Gogs Authors. All rights reserved. 2 // Copyright 2019 The Gitea Authors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 5 package admin 6 7 import ( 8 "net/http" 9 10 "code.gitea.io/gitea/models/db" 11 "code.gitea.io/gitea/models/organization" 12 user_model "code.gitea.io/gitea/models/user" 13 "code.gitea.io/gitea/modules/context" 14 api "code.gitea.io/gitea/modules/structs" 15 "code.gitea.io/gitea/modules/web" 16 "code.gitea.io/gitea/routers/api/v1/utils" 17 "code.gitea.io/gitea/services/convert" 18 ) 19 20 // CreateOrg api for create organization 21 func CreateOrg(ctx *context.APIContext) { 22 // swagger:operation POST /admin/users/{username}/orgs admin adminCreateOrg 23 // --- 24 // summary: Create an organization 25 // consumes: 26 // - application/json 27 // produces: 28 // - application/json 29 // parameters: 30 // - name: username 31 // in: path 32 // description: username of the user that will own the created organization 33 // type: string 34 // required: true 35 // - name: organization 36 // in: body 37 // required: true 38 // schema: { "$ref": "#/definitions/CreateOrgOption" } 39 // responses: 40 // "201": 41 // "$ref": "#/responses/Organization" 42 // "403": 43 // "$ref": "#/responses/forbidden" 44 // "422": 45 // "$ref": "#/responses/validationError" 46 47 form := web.GetForm(ctx).(*api.CreateOrgOption) 48 49 visibility := api.VisibleTypePublic 50 if form.Visibility != "" { 51 visibility = api.VisibilityModes[form.Visibility] 52 } 53 54 org := &organization.Organization{ 55 Name: form.UserName, 56 FullName: form.FullName, 57 Description: form.Description, 58 Website: form.Website, 59 Location: form.Location, 60 IsActive: true, 61 Type: user_model.UserTypeOrganization, 62 Visibility: visibility, 63 } 64 65 if err := organization.CreateOrganization(org, ctx.ContextUser); err != nil { 66 if user_model.IsErrUserAlreadyExist(err) || 67 db.IsErrNameReserved(err) || 68 db.IsErrNameCharsNotAllowed(err) || 69 db.IsErrNamePatternNotAllowed(err) { 70 ctx.Error(http.StatusUnprocessableEntity, "", err) 71 } else { 72 ctx.Error(http.StatusInternalServerError, "CreateOrganization", err) 73 } 74 return 75 } 76 77 ctx.JSON(http.StatusCreated, convert.ToOrganization(ctx, org)) 78 } 79 80 // GetAllOrgs API for getting information of all the organizations 81 func GetAllOrgs(ctx *context.APIContext) { 82 // swagger:operation GET /admin/orgs admin adminGetAllOrgs 83 // --- 84 // summary: List all organizations 85 // produces: 86 // - application/json 87 // parameters: 88 // - name: page 89 // in: query 90 // description: page number of results to return (1-based) 91 // type: integer 92 // - name: limit 93 // in: query 94 // description: page size of results 95 // type: integer 96 // responses: 97 // "200": 98 // "$ref": "#/responses/OrganizationList" 99 // "403": 100 // "$ref": "#/responses/forbidden" 101 102 listOptions := utils.GetListOptions(ctx) 103 104 users, maxResults, err := user_model.SearchUsers(ctx, &user_model.SearchUserOptions{ 105 Actor: ctx.Doer, 106 Type: user_model.UserTypeOrganization, 107 OrderBy: db.SearchOrderByAlphabetically, 108 ListOptions: listOptions, 109 Visible: []api.VisibleType{api.VisibleTypePublic, api.VisibleTypeLimited, api.VisibleTypePrivate}, 110 }) 111 if err != nil { 112 ctx.Error(http.StatusInternalServerError, "SearchOrganizations", err) 113 return 114 } 115 orgs := make([]*api.Organization, len(users)) 116 for i := range users { 117 orgs[i] = convert.ToOrganization(ctx, organization.OrgFromUser(users[i])) 118 } 119 120 ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) 121 ctx.SetTotalCountHeader(maxResults) 122 ctx.JSON(http.StatusOK, &orgs) 123 }