diff options
author | Bo-Yi Wu <appleboy.tw@gmail.com> | 2023-08-22 11:20:34 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-22 11:20:34 +0800 |
commit | 23addde28ebd69ef2c1cec6a63123c87ec8bffe9 (patch) | |
tree | 6b4327eeef013f38bc7cc332b653bbddb9b43d8d /routers/api | |
parent | a4a567f29f69e39d57a9fa7008d708f7fd080e58 (diff) | |
download | gitea-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.go | 1 | ||||
-rw-r--r-- | routers/api/v1/org/action.go | 51 | ||||
-rw-r--r-- | routers/api/v1/swagger/action.go | 7 | ||||
-rw-r--r-- | routers/api/v1/swagger/options.go | 3 |
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 } |