// Copyright 2016 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 ( "net/http" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/routers/api/v1/utils" ) // ListHooks list an organziation's webhooks func ListHooks(ctx *context.APIContext) { // swagger:operation GET /orgs/{org}/hooks organization orgListHooks // --- // summary: List an organization's webhooks // produces: // - application/json // parameters: // - name: org // in: path // description: name of the organization // type: string // required: true // responses: // "200": // "$ref": "#/responses/HookList" org := ctx.Org.Organization orgHooks, err := models.GetWebhooksByOrgID(org.ID) if err != nil { ctx.Error(http.StatusInternalServerError, "GetWebhooksByOrgID", err) return } hooks := make([]*api.Hook, len(orgHooks)) for i, hook := range orgHooks { hooks[i] = convert.ToHook(org.HomeLink(), hook) } ctx.JSON(http.StatusOK, hooks) } // GetHook get an organization's hook by id func GetHook(ctx *context.APIContext) { // swagger:operation GET /orgs/{org}/hooks/{id} organization orgGetHook // --- // summary: Get a hook // produces: // - application/json // parameters: // - name: org // in: path // description: name of the organization // type: string // required: true // - name: id // in: path // description: id of the hook to get // type: integer // format: int64 // required: true // responses: // "200": // "$ref": "#/responses/Hook" org := ctx.Org.Organization hookID := ctx.ParamsInt64(":id") hook, err := utils.GetOrgHook(ctx, org.ID, hookID) if err != nil { return } ctx.JSON(http.StatusOK, convert.ToHook(org.HomeLink(), hook)) } // CreateHook create a hook for an organization func CreateHook(ctx *context.APIContext, form api.CreateHookOption) { // swagger:operation POST /orgs/{org}/hooks/ organization orgCreateHook // --- // summary: Create a hook // consumes: // - application/json // produces: // - application/json // parameters: // - name: org // in: path // description: name of the organization // type: string // required: true // - name: body // in: body // required: true // schema: // "$ref": "#/definitions/CreateHookOption" // responses: // "201": // "$ref": "#/responses/Hook" //TODO in body params if !utils.CheckCreateHookOption(ctx, &form) { return } utils.AddOrgHook(ctx, &form) } // EditHook modify a hook of a repository func EditHook(ctx *context.APIContext, form api.EditHookOption) { // swagger:operation PATCH /orgs/{org}/hooks/{id} organization orgEditHook // --- // summary: Update a hook // consumes: // - application/json // produces: // - application/json // parameters: // - name: org // in: path // description: name of the organization // type: string // required: true // - name: id // in: path // description: id of the hook to update // type: integer // format: int64 // required: true // - name: body // in: body // schema: // "$ref": "#/definitions/EditHookOption" // responses: // "200": // "$ref": "#/responses/Hook" //TODO in body params hookID := ctx.ParamsInt64(":id") utils.EditOrgHook(ctx, &form, hookID) } // DeleteHook delete a hook of an organization func DeleteHook(ctx *context.APIContext) { // swagger:operation DELETE /orgs/{org}/hooks/{id} organization orgDeleteHook // --- // summary: Delete a hook // produces: // - application/json // parameters: // - name: org // in: path // description: name of the organization // type: string // required: true // - name: id // in: path // description: id of the hook to delete // type: integer // format: int64 // required: true // responses: // "204": // "$ref": "#/responses/empty" org := ctx.Org.Organization hookID := ctx.ParamsInt64(":id") if err := models.DeleteWebhookByOrgID(org.ID, hookID); err != nil { if models.IsErrWebhookNotExist(err) { ctx.NotFound() } else { ctx.Error(http.StatusInternalServerError, "DeleteWebhookByOrgID", err) } return } ctx.Status(http.StatusNoContent) }