Skip to content

Commit 79d74d2

Browse files
appleboylunnytechknowlogickGiteaBot
authored
Add API route to list org secrets (#26485)
- Add a new function `CountOrgSecrets` in the file `models/secret/secret.go` - Add a new file `modules/structs/secret.go` - Add a new function `ListActionsSecrets` in the file `routers/api/v1/api.go` - Add a new file `routers/api/v1/org/action.go` - Add a new function `listActionsSecrets` in the file `routers/api/v1/org/action.go` go-sdk: https://gitea.com/gitea/go-sdk/pulls/629 --------- Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: Giteabot <teabot@gitea.io>
1 parent d317c98 commit 79d74d2

File tree

6 files changed

+172
-0
lines changed

6 files changed

+172
-0
lines changed

models/secret/secret.go

+5
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,8 @@ func FindSecrets(ctx context.Context, opts FindSecretsOptions) ([]*Secret, error
8888
Where(opts.toConds()).
8989
Find(&secrets)
9090
}
91+
92+
// CountSecrets counts the secrets
93+
func CountSecrets(ctx context.Context, opts *FindSecretsOptions) (int64, error) {
94+
return db.GetEngine(ctx).Where(opts.toConds()).Count(new(Secret))
95+
}

modules/structs/secret.go

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package structs
5+
6+
import "time"
7+
8+
// User represents a secret
9+
// swagger:model
10+
type Secret struct {
11+
// the secret's name
12+
Name string `json:"name"`
13+
// swagger:strfmt date-time
14+
Created time.Time `json:"created_at"`
15+
}

routers/api/v1/api.go

+3
Original file line numberDiff line numberDiff line change
@@ -1298,6 +1298,9 @@ func Routes() *web.Route {
12981298
m.Combo("/{username}").Get(reqToken(), org.IsMember).
12991299
Delete(reqToken(), reqOrgOwnership(), org.DeleteMember)
13001300
})
1301+
m.Group("/actions/secrets", func() {
1302+
m.Get("", reqToken(), reqOrgOwnership(), org.ListActionsSecrets)
1303+
})
13011304
m.Group("/public_members", func() {
13021305
m.Get("", org.ListPublicMembers)
13031306
m.Combo("/{username}").Get(org.IsPublicMember).

routers/api/v1/org/action.go

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package org
5+
6+
import (
7+
"net/http"
8+
9+
"code.gitea.io/gitea/models/secret"
10+
"code.gitea.io/gitea/modules/context"
11+
api "code.gitea.io/gitea/modules/structs"
12+
"code.gitea.io/gitea/routers/api/v1/utils"
13+
)
14+
15+
// ListActionsSecrets list an organization's actions secrets
16+
func ListActionsSecrets(ctx *context.APIContext) {
17+
// swagger:operation GET /orgs/{org}/actions/secrets organization orgListActionsSecrets
18+
// ---
19+
// summary: List an organization's actions secrets
20+
// produces:
21+
// - application/json
22+
// parameters:
23+
// - name: org
24+
// in: path
25+
// description: name of the organization
26+
// type: string
27+
// required: true
28+
// - name: page
29+
// in: query
30+
// description: page number of results to return (1-based)
31+
// type: integer
32+
// - name: limit
33+
// in: query
34+
// description: page size of results
35+
// type: integer
36+
// responses:
37+
// "200":
38+
// "$ref": "#/responses/SecretList"
39+
40+
listActionsSecrets(ctx)
41+
}
42+
43+
// listActionsSecrets list an organization's actions secrets
44+
func listActionsSecrets(ctx *context.APIContext) {
45+
opts := &secret.FindSecretsOptions{
46+
OwnerID: ctx.Org.Organization.ID,
47+
ListOptions: utils.GetListOptions(ctx),
48+
}
49+
50+
count, err := secret.CountSecrets(ctx, opts)
51+
if err != nil {
52+
ctx.InternalServerError(err)
53+
return
54+
}
55+
56+
secrets, err := secret.FindSecrets(ctx, *opts)
57+
if err != nil {
58+
ctx.InternalServerError(err)
59+
return
60+
}
61+
62+
apiSecrets := make([]*api.Secret, len(secrets))
63+
for k, v := range secrets {
64+
apiSecrets[k] = &api.Secret{
65+
Name: v.Name,
66+
Created: v.CreatedUnix.AsTime(),
67+
}
68+
}
69+
70+
ctx.SetTotalCountHeader(count)
71+
ctx.JSON(http.StatusOK, apiSecrets)
72+
}

routers/api/v1/swagger/action.go

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package swagger
5+
6+
import api "code.gitea.io/gitea/modules/structs"
7+
8+
// SecretList
9+
// swagger:response SecretList
10+
type swaggerResponseSecretList struct {
11+
// in:body
12+
Body []api.Secret `json:"body"`
13+
}

templates/swagger/v1_json.tmpl

+64
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)