aboutsummaryrefslogtreecommitdiffstats
path: root/routers/api
diff options
context:
space:
mode:
authorBo-Yi Wu <appleboy.tw@gmail.com>2023-08-22 11:20:34 +0800
committerGitHub <noreply@github.com>2023-08-22 11:20:34 +0800
commit23addde28ebd69ef2c1cec6a63123c87ec8bffe9 (patch)
tree6b4327eeef013f38bc7cc332b653bbddb9b43d8d /routers/api
parenta4a567f29f69e39d57a9fa7008d708f7fd080e58 (diff)
downloadgitea-23addde28ebd69ef2c1cec6a63123c87ec8bffe9.tar.gz
gitea-23addde28ebd69ef2c1cec6a63123c87ec8bffe9.zip
feat: implement organization secret creation API (#26566)
- Add a new `CreateSecretOption` struct for creating secrets - Implement a `CreateOrgSecret` function to create a secret in an organization - Add a new route in `api.go` to handle the creation of organization secrets - Update the Swagger template to include the new `CreateOrgSecret` API endpoint --------- Signed-off-by: appleboy <appleboy.tw@gmail.com>
Diffstat (limited to 'routers/api')
-rw-r--r--routers/api/v1/api.go1
-rw-r--r--routers/api/v1/org/action.go51
-rw-r--r--routers/api/v1/swagger/action.go7
-rw-r--r--routers/api/v1/swagger/options.go3
4 files changed, 58 insertions, 4 deletions
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index ccae83a940..9613bd610d 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -1300,6 +1300,7 @@ func Routes() *web.Route {
})
m.Group("/actions/secrets", func() {
m.Get("", reqToken(), reqOrgOwnership(), org.ListActionsSecrets)
+ m.Post("", reqToken(), reqOrgOwnership(), bind(api.CreateSecretOption{}), org.CreateOrgSecret)
})
m.Group("/public_members", func() {
m.Get("", org.ListPublicMembers)
diff --git a/routers/api/v1/org/action.go b/routers/api/v1/org/action.go
index 9deda2209c..7659191946 100644
--- a/routers/api/v1/org/action.go
+++ b/routers/api/v1/org/action.go
@@ -6,10 +6,13 @@ package org
import (
"net/http"
- "code.gitea.io/gitea/models/secret"
+ 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/api/v1/utils"
+ "code.gitea.io/gitea/routers/web/shared/actions"
+ "code.gitea.io/gitea/services/convert"
)
// ListActionsSecrets list an organization's actions secrets
@@ -42,18 +45,18 @@ func ListActionsSecrets(ctx *context.APIContext) {
// listActionsSecrets list an organization's actions secrets
func listActionsSecrets(ctx *context.APIContext) {
- opts := &secret.FindSecretsOptions{
+ opts := &secret_model.FindSecretsOptions{
OwnerID: ctx.Org.Organization.ID,
ListOptions: utils.GetListOptions(ctx),
}
- count, err := secret.CountSecrets(ctx, opts)
+ count, err := secret_model.CountSecrets(ctx, opts)
if err != nil {
ctx.InternalServerError(err)
return
}
- secrets, err := secret.FindSecrets(ctx, *opts)
+ secrets, err := secret_model.FindSecrets(ctx, *opts)
if err != nil {
ctx.InternalServerError(err)
return
@@ -70,3 +73,43 @@ func listActionsSecrets(ctx *context.APIContext) {
ctx.SetTotalCountHeader(count)
ctx.JSON(http.StatusOK, apiSecrets)
}
+
+// CreateOrgSecret create one secret of the organization
+func CreateOrgSecret(ctx *context.APIContext) {
+ // swagger:operation POST /orgs/{org}/actions/secrets organization createOrgSecret
+ // ---
+ // summary: Create a secret in an organization
+ // consumes:
+ // - application/json
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: org
+ // in: path
+ // description: name of organization
+ // type: string
+ // required: true
+ // - name: body
+ // in: body
+ // schema:
+ // "$ref": "#/definitions/CreateSecretOption"
+ // responses:
+ // "201":
+ // "$ref": "#/responses/Secret"
+ // "400":
+ // "$ref": "#/responses/error"
+ // "404":
+ // "$ref": "#/responses/notFound"
+ // "403":
+ // "$ref": "#/responses/forbidden"
+ opt := web.GetForm(ctx).(*api.CreateSecretOption)
+ s, err := secret_model.InsertEncryptedSecret(
+ ctx, ctx.Org.Organization.ID, 0, opt.Name, actions.ReserveLineBreakForTextarea(opt.Data),
+ )
+ if err != nil {
+ ctx.Error(http.StatusInternalServerError, "InsertEncryptedSecret", err)
+ return
+ }
+
+ ctx.JSON(http.StatusCreated, convert.ToSecret(s))
+}
diff --git a/routers/api/v1/swagger/action.go b/routers/api/v1/swagger/action.go
index 493b167f72..3771780718 100644
--- a/routers/api/v1/swagger/action.go
+++ b/routers/api/v1/swagger/action.go
@@ -11,3 +11,10 @@ type swaggerResponseSecretList struct {
// in:body
Body []api.Secret `json:"body"`
}
+
+// Secret
+// swagger:response Secret
+type swaggerResponseSecret struct {
+ // in:body
+ Body api.Secret `json:"body"`
+}
diff --git a/routers/api/v1/swagger/options.go b/routers/api/v1/swagger/options.go
index 073d9a19f7..8e7e6ec3df 100644
--- a/routers/api/v1/swagger/options.go
+++ b/routers/api/v1/swagger/options.go
@@ -187,4 +187,7 @@ type swaggerParameterBodies struct {
// in:body
UpdateRepoAvatarOptions api.UpdateRepoAvatarOption
+
+ // in:body
+ CreateSecretOption api.CreateSecretOption
}