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  }