// Copyright 2015 The Gogs Authors. All rights reserved. // Copyright 2018 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package org import ( api "code.gitea.io/sdk/gitea" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/routers/api/v1/convert" "code.gitea.io/gitea/routers/api/v1/user" ) func listUserOrgs(ctx *context.APIContext, u *models.User, all bool) { if err := u.GetOrganizations(all); err != nil { ctx.Error(500, "GetOrganizations", err) return } apiOrgs := make([]*api.Organization, len(u.Orgs)) for i := range u.Orgs { apiOrgs[i] = convert.ToOrganization(u.Orgs[i]) } ctx.JSON(200, &apiOrgs) } // ListMyOrgs list all my orgs func ListMyOrgs(ctx *context.APIContext) { // swagger:operation GET /user/orgs organization orgListCurrentUserOrgs // --- // summary: List the current user's organizations // produces: // - application/json // responses: // "200": // "$ref": "#/responses/OrganizationList" listUserOrgs(ctx, ctx.User, true) } // ListUserOrgs list user's orgs func ListUserOrgs(ctx *context.APIContext) { // swagger:operation GET /user/{username}/orgs organization orgListUserOrgs // --- // summary: List a user's organizations // produces: // - application/json // parameters: // - name: username // in: path // description: username of user // type: string // required: true // responses: // "200": // "$ref": "#/responses/OrganizationList" u := user.GetUserByParams(ctx) if ctx.Written() { return } listUserOrgs(ctx, u, false) } // Create api for create organization func Create(ctx *context.APIContext, form api.CreateOrgOption) { // swagger:operation POST /orgs organization orgCreate // --- // summary: Create an organization // consumes: // - application/json // produces: // - application/json // parameters: // - name: organization // in: body // required: true // schema: { "$ref": "#/definitions/CreateOrgOption" } // responses: // "201": // "$ref": "#/responses/Organization" // "403": // "$ref": "#/responses/forbidden" // "422": // "$ref": "#/responses/validationError" if !ctx.User.AllowCreateOrganization { ctx.Error(403, "Create organization not allowed", nil) return } org := &models.User{ Name: form.UserName, FullName: form.FullName, Description: form.Description, Website: form.Website, Location: form.Location, IsActive: true, Type: models.UserTypeOrganization, } if err := models.CreateOrganization(org, ctx.User); err != nil { if models.IsErrUserAlreadyExist(err) || models.IsErrNameReserved(err) || models.IsErrNamePatternNotAllowed(err) { ctx.Error(422, "", err) } else { ctx.Error(500, "CreateOrganization", err) } return } ctx.JSON(201, convert.ToOrganization(org)) } // Get get an organization func Get(ctx *context.APIContext) { // swagger:operation GET /orgs/{org} organization orgGet // --- // summary: Get an organization // produces: // - application/json // parameters: // - name: org // in: path // description: name of the organization to get // type: string // required: true // responses: // "200": // "$ref": "#/responses/Organization" ctx.JSON(200, convert.ToOrganization(ctx.Org.Organization)) } // Edit change an organization's information func Edit(ctx *context.APIContext, form api.EditOrgOption) { // swagger:operation PATCH /orgs/{org} organization orgEdit // --- // summary: Edit an organization // consumes: // - application/json // produces: // - application/json // parameters: // - name: org // in: path // description: name of the organization to edit // type: string // required: true // - name: body // in: body // schema: // "$ref": "#/definitions/EditOrgOption" // responses: // "200": // "$ref": "#/responses/Organization" org := ctx.Org.Organization org.FullName = form.FullName org.Description = form.Description org.Website = form.Website org.Location = form.Location if err := models.UpdateUserCols(org, "full_name", "description", "website", "location"); err != nil { ctx.Error(500, "UpdateUser", err) return } ctx.JSON(200, convert.ToOrganization(org)) }