Skip to content

Commit b5278a9

Browse files
committed
feat: implement organization secret creation API
- 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 - Change the `basePath` in the Swagger template from `{{AppSubUrl | JSEscape | Safe}}/api/v1` to `/api/v1` Signed-off-by: appleboy <[email protected]>
1 parent 47fddaa commit b5278a9

File tree

4 files changed

+101
-2
lines changed

4 files changed

+101
-2
lines changed

modules/structs/secret.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,15 @@ type Secret struct {
1313
// swagger:strfmt date-time
1414
Created time.Time `json:"created_at"`
1515
}
16+
17+
// CreateSecretOption options when creating secret
18+
// swagger:model
19+
type CreateSecretOption struct {
20+
// Name of the secret to create
21+
//
22+
// required: true
23+
// unique: true
24+
Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"`
25+
// Data of the secret to create
26+
Data string `json:"data" binding:"Required"`
27+
}

routers/api/v1/api.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1300,6 +1300,7 @@ func Routes() *web.Route {
13001300
})
13011301
m.Group("/actions/secrets", func() {
13021302
m.Get("", reqToken(), reqOrgOwnership(), org.ListActionsSecrets)
1303+
m.Post("", reqToken(), reqOrgOwnership(), bind(api.CreateSecretOption{}), org.CreateOrgSecret)
13031304
})
13041305
m.Group("/public_members", func() {
13051306
m.Get("", org.ListPublicMembers)

routers/api/v1/org/action.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ import (
77
"net/http"
88

99
"code.gitea.io/gitea/models/secret"
10+
secret_model "code.gitea.io/gitea/models/secret"
1011
"code.gitea.io/gitea/modules/context"
1112
api "code.gitea.io/gitea/modules/structs"
13+
"code.gitea.io/gitea/modules/web"
1214
"code.gitea.io/gitea/routers/api/v1/utils"
15+
"code.gitea.io/gitea/routers/web/shared/actions"
1316
)
1417

1518
// ListActionsSecrets list an organization's actions secrets
@@ -70,3 +73,43 @@ func listActionsSecrets(ctx *context.APIContext) {
7073
ctx.SetTotalCountHeader(count)
7174
ctx.JSON(http.StatusOK, apiSecrets)
7275
}
76+
77+
// CreateOrgSecret create one secret of the organization
78+
func CreateOrgSecret(ctx *context.APIContext) {
79+
// swagger:operation POST /orgs/{org}/actions/secrets organization createOrgSecret
80+
// ---
81+
// summary: Create a secret in an organization
82+
// consumes:
83+
// - application/json
84+
// produces:
85+
// - application/json
86+
// parameters:
87+
// - name: org
88+
// in: path
89+
// description: name of organization
90+
// type: string
91+
// required: true
92+
// - name: body
93+
// in: body
94+
// schema:
95+
// "$ref": "#/definitions/CreateSecretOption"
96+
// responses:
97+
// "201":
98+
// "$ref": "#/responses/Secret"
99+
// "400":
100+
// "$ref": "#/responses/error"
101+
// "404":
102+
// "$ref": "#/responses/notFound"
103+
// "403":
104+
// "$ref": "#/responses/forbidden"
105+
opt := web.GetForm(ctx).(*api.CreateSecretOption)
106+
_, err := secret_model.InsertEncryptedSecret(
107+
ctx, ctx.Org.Organization.ID, 0, opt.Name, actions.ReserveLineBreakForTextarea(opt.Data),
108+
)
109+
if err != nil {
110+
ctx.Error(http.StatusInternalServerError, "InsertEncryptedSecret", err)
111+
return
112+
}
113+
114+
ctx.Status(http.StatusCreated)
115+
}

templates/swagger/v1_json.tmpl

Lines changed: 45 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)