mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-08-14 15:16:49 +02:00
Speaking from personal experience, when exploring the API I find myself trying to parse the exact meaning of many descriptions for a while, and I also have to get used to many different kinds of inconsistencies and grammar issues. This PR improves a few of these. Some I tried to reword to make them easier to understand, for others I just improved consistency a little, like capitalization. This area needs more work, this PR just makes some progress. Anything that is improved in this one can be improved further in later PRs, so in review please focus on regressions if you find any. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8728 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Co-authored-by: 0ko <0ko@noreply.codeberg.org> Co-committed-by: 0ko <0ko@noreply.codeberg.org>
176 lines
4.2 KiB
Go
176 lines
4.2 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package admin
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"forgejo.org/models/webhook"
|
|
"forgejo.org/modules/setting"
|
|
api "forgejo.org/modules/structs"
|
|
"forgejo.org/modules/util"
|
|
"forgejo.org/modules/web"
|
|
"forgejo.org/routers/api/v1/utils"
|
|
"forgejo.org/services/context"
|
|
webhook_service "forgejo.org/services/webhook"
|
|
)
|
|
|
|
// ListHooks list system webhooks
|
|
func ListHooks(ctx *context.APIContext) {
|
|
// swagger:operation GET /admin/hooks admin adminListHooks
|
|
// ---
|
|
// summary: List global (system) webhooks
|
|
// 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
|
|
// responses:
|
|
// "200":
|
|
// "$ref": "#/responses/HookList"
|
|
|
|
sysHooks, err := webhook.GetSystemWebhooks(ctx, false)
|
|
if err != nil {
|
|
ctx.Error(http.StatusInternalServerError, "GetSystemWebhooks", err)
|
|
return
|
|
}
|
|
hooks := make([]*api.Hook, len(sysHooks))
|
|
for i, hook := range sysHooks {
|
|
h, err := webhook_service.ToHook(setting.AppURL+"/admin", hook)
|
|
if err != nil {
|
|
ctx.Error(http.StatusInternalServerError, "convert.ToHook", err)
|
|
return
|
|
}
|
|
hooks[i] = h
|
|
}
|
|
ctx.JSON(http.StatusOK, hooks)
|
|
}
|
|
|
|
// GetHook get an organization's hook by id
|
|
func GetHook(ctx *context.APIContext) {
|
|
// swagger:operation GET /admin/hooks/{id} admin adminGetHook
|
|
// ---
|
|
// summary: Get a hook
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - name: id
|
|
// in: path
|
|
// description: id of the hook to get
|
|
// type: integer
|
|
// format: int64
|
|
// required: true
|
|
// responses:
|
|
// "200":
|
|
// "$ref": "#/responses/Hook"
|
|
|
|
hookID := ctx.ParamsInt64(":id")
|
|
hook, err := webhook.GetSystemOrDefaultWebhook(ctx, hookID)
|
|
if err != nil {
|
|
if errors.Is(err, util.ErrNotExist) {
|
|
ctx.NotFound()
|
|
} else {
|
|
ctx.Error(http.StatusInternalServerError, "GetSystemOrDefaultWebhook", err)
|
|
}
|
|
return
|
|
}
|
|
h, err := webhook_service.ToHook("/admin/", hook)
|
|
if err != nil {
|
|
ctx.Error(http.StatusInternalServerError, "convert.ToHook", err)
|
|
return
|
|
}
|
|
ctx.JSON(http.StatusOK, h)
|
|
}
|
|
|
|
// CreateHook create a hook for an organization
|
|
func CreateHook(ctx *context.APIContext) {
|
|
// swagger:operation POST /admin/hooks admin adminCreateHook
|
|
// ---
|
|
// summary: Create a hook
|
|
// consumes:
|
|
// - application/json
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - name: body
|
|
// in: body
|
|
// required: true
|
|
// schema:
|
|
// "$ref": "#/definitions/CreateHookOption"
|
|
// responses:
|
|
// "201":
|
|
// "$ref": "#/responses/Hook"
|
|
|
|
form := web.GetForm(ctx).(*api.CreateHookOption)
|
|
|
|
utils.AddSystemHook(ctx, form)
|
|
}
|
|
|
|
// EditHook modify a hook of a repository
|
|
func EditHook(ctx *context.APIContext) {
|
|
// swagger:operation PATCH /admin/hooks/{id} admin adminEditHook
|
|
// ---
|
|
// summary: Update a hook
|
|
// consumes:
|
|
// - application/json
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - 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"
|
|
|
|
form := web.GetForm(ctx).(*api.EditHookOption)
|
|
|
|
// TODO in body params
|
|
hookID := ctx.ParamsInt64(":id")
|
|
utils.EditSystemHook(ctx, form, hookID)
|
|
}
|
|
|
|
// DeleteHook delete a system hook
|
|
func DeleteHook(ctx *context.APIContext) {
|
|
// swagger:operation DELETE /admin/hooks/{id} admin adminDeleteHook
|
|
// ---
|
|
// summary: Delete a hook
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - name: id
|
|
// in: path
|
|
// description: id of the hook to delete
|
|
// type: integer
|
|
// format: int64
|
|
// required: true
|
|
// responses:
|
|
// "204":
|
|
// "$ref": "#/responses/empty"
|
|
|
|
hookID := ctx.ParamsInt64(":id")
|
|
if err := webhook.DeleteDefaultSystemWebhook(ctx, hookID); err != nil {
|
|
if errors.Is(err, util.ErrNotExist) {
|
|
ctx.NotFound()
|
|
} else {
|
|
ctx.Error(http.StatusInternalServerError, "DeleteDefaultSystemWebhook", err)
|
|
}
|
|
return
|
|
}
|
|
ctx.Status(http.StatusNoContent)
|
|
}
|