mirror of https://github.com/go-gitea/gitea
feat(API): add route and implementation for creating/updating repository secret (#26766)
spec: https://docs.github.com/en/rest/actions/secrets?apiVersion=2022-11-28#create-or-update-a-repository-secret - Add a new route for creating or updating a secret value in a repository - Create a new file `routers/api/v1/repo/action.go` with the implementation of the `CreateOrUpdateSecret` function - Update the Swagger documentation for the `updateRepoSecret` operation in the `v1_json.tmpl` template file --------- Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> Co-authored-by: Giteabot <teabot@gitea.io>pull/26759/head^2
parent
2d9249b6d9
commit
b91057b172
@ -0,0 +1,75 @@ |
|||||||
|
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
package repo |
||||||
|
|
||||||
|
import ( |
||||||
|
"net/http" |
||||||
|
|
||||||
|
secret_model "code.gitea.io/gitea/models/secret" |
||||||
|
"code.gitea.io/gitea/modules/context" |
||||||
|
api "code.gitea.io/gitea/modules/structs" |
||||||
|
"code.gitea.io/gitea/modules/web" |
||||||
|
"code.gitea.io/gitea/routers/web/shared/actions" |
||||||
|
) |
||||||
|
|
||||||
|
// create or update one secret of the repository
|
||||||
|
func CreateOrUpdateSecret(ctx *context.APIContext) { |
||||||
|
// swagger:operation PUT /repos/{owner}/{repo}/actions/secrets/{secretname} repository updateRepoSecret
|
||||||
|
// ---
|
||||||
|
// summary: Create or Update a secret value in a repository
|
||||||
|
// consumes:
|
||||||
|
// - application/json
|
||||||
|
// produces:
|
||||||
|
// - application/json
|
||||||
|
// parameters:
|
||||||
|
// - name: owner
|
||||||
|
// in: path
|
||||||
|
// description: owner of the repository
|
||||||
|
// type: string
|
||||||
|
// required: true
|
||||||
|
// - name: repo
|
||||||
|
// in: path
|
||||||
|
// description: name of the repository
|
||||||
|
// type: string
|
||||||
|
// required: true
|
||||||
|
// - name: secretname
|
||||||
|
// in: path
|
||||||
|
// description: name of the secret
|
||||||
|
// type: string
|
||||||
|
// required: true
|
||||||
|
// - name: body
|
||||||
|
// in: body
|
||||||
|
// schema:
|
||||||
|
// "$ref": "#/definitions/CreateOrUpdateSecretOption"
|
||||||
|
// responses:
|
||||||
|
// "201":
|
||||||
|
// description: response when creating a secret
|
||||||
|
// "204":
|
||||||
|
// description: response when updating a secret
|
||||||
|
// "400":
|
||||||
|
// "$ref": "#/responses/error"
|
||||||
|
// "403":
|
||||||
|
// "$ref": "#/responses/forbidden"
|
||||||
|
|
||||||
|
owner := ctx.Repo.Owner |
||||||
|
repo := ctx.Repo.Repository |
||||||
|
|
||||||
|
secretName := ctx.Params(":secretname") |
||||||
|
if err := actions.NameRegexMatch(secretName); err != nil { |
||||||
|
ctx.Error(http.StatusBadRequest, "CreateOrUpdateSecret", err) |
||||||
|
return |
||||||
|
} |
||||||
|
opt := web.GetForm(ctx).(*api.CreateOrUpdateSecretOption) |
||||||
|
isCreated, err := secret_model.CreateOrUpdateSecret(ctx, owner.ID, repo.ID, secretName, opt.Data) |
||||||
|
if err != nil { |
||||||
|
ctx.Error(http.StatusInternalServerError, "CreateOrUpdateSecret", err) |
||||||
|
return |
||||||
|
} |
||||||
|
if isCreated { |
||||||
|
ctx.Status(http.StatusCreated) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
ctx.Status(http.StatusNoContent) |
||||||
|
} |
Loading…
Reference in new issue