Skip to content

Commit 78bfa24

Browse files
feat: implement API for creating & listing secrets
1 parent dc046ae commit 78bfa24

File tree

3 files changed

+81
-14
lines changed

3 files changed

+81
-14
lines changed

coderd/database/db2sdk/db2sdk.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,3 +884,14 @@ func PreviewParameterValidation(v *previewtypes.ParameterValidation) codersdk.Pr
884884
Monotonic: v.Monotonic,
885885
}
886886
}
887+
888+
func UserSecret(secret database.UserSecret) codersdk.UserSecret {
889+
return codersdk.UserSecret{
890+
ID: secret.ID,
891+
UserID: secret.UserID,
892+
Name: secret.Name,
893+
Description: secret.Description,
894+
CreatedAt: secret.CreatedAt,
895+
UpdatedAt: secret.UpdatedAt,
896+
}
897+
}

coderd/user_secrets.go

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package coderd
22

33
import (
4+
"github.com/coder/coder/v2/coderd/database"
5+
"github.com/coder/coder/v2/coderd/database/db2sdk"
46
"github.com/coder/coder/v2/coderd/httpmw"
57
"net/http"
68

@@ -9,16 +11,44 @@ import (
911
)
1012

1113
func (api *API) createUserSecret(rw http.ResponseWriter, r *http.Request) {
12-
var (
13-
ctx = r.Context()
14-
apiKey = httpmw.APIKey(r)
15-
16-
req codersdk.CreateTemplateVersionRequest
17-
)
14+
ctx := r.Context()
15+
apiKey := httpmw.APIKey(r)
1816

17+
var req codersdk.CreateUserSecretRequest
1918
if !httpapi.Read(ctx, rw, r, &req) {
2019
return
2120
}
2221

23-
//api.Database.GetUserByID()
22+
secret, err := api.Database.InsertUserSecret(ctx, database.InsertUserSecretParams{
23+
UserID: apiKey.UserID,
24+
Name: req.Name,
25+
Description: req.Description,
26+
Value: req.Value,
27+
})
28+
if err != nil {
29+
httpapi.InternalServerError(rw, err)
30+
return
31+
}
32+
33+
httpapi.Write(ctx, rw, http.StatusCreated, db2sdk.UserSecret(secret))
34+
}
35+
36+
func (api *API) listUserSecrets(rw http.ResponseWriter, r *http.Request) {
37+
ctx := r.Context()
38+
apiKey := httpmw.APIKey(r)
39+
40+
secrets, err := api.Database.ListUserSecrets(ctx, apiKey.UserID)
41+
if err != nil {
42+
httpapi.InternalServerError(rw, err)
43+
return
44+
}
45+
46+
response := codersdk.ListUserSecretsResponse{
47+
Secrets: make([]codersdk.UserSecret, len(secrets)),
48+
}
49+
for i, secret := range secrets {
50+
response.Secrets[i] = db2sdk.UserSecret(secret)
51+
}
52+
53+
httpapi.Write(ctx, rw, http.StatusOK, response)
2454
}

codersdk/user_secrets.go

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,38 @@
11
package codersdk
22

3-
// TODO:
3+
import (
4+
"github.com/google/uuid"
5+
"time"
6+
)
7+
8+
// TODO: add and register custom validator functions. check codersdk/name.go for examples.
9+
// TODO: reuse NameValid func for Name?
410
type CreateUserSecretRequest struct {
5-
Name string `json:"name,omitempty"`
6-
Description string `json:"description,omitempty"`
7-
Value string `json:"value,omitempty"`
11+
Name string `json:"name" validate:"required"`
12+
Description string `json:"description,omitempty" validate:"lt=1000"`
13+
Value string `json:"value" validate:"required"`
14+
}
15+
16+
type UpdateUserSecretRequest struct {
17+
Name string `json:"name" validate:"required"`
18+
Description string `json:"description,omitempty" validate:"lt=1000"`
19+
Value string `json:"value" validate:"required"`
20+
}
21+
22+
// Response types
23+
type UserSecret struct {
24+
ID uuid.UUID `json:"id" format:"uuid"`
25+
UserID uuid.UUID `json:"user_id" format:"uuid"`
26+
Name string `json:"name"`
27+
Description string `json:"description,omitempty"`
28+
CreatedAt time.Time `json:"created_at" format:"date-time"`
29+
UpdatedAt time.Time `json:"updated_at" format:"date-time"`
30+
}
31+
32+
type UserSecretValue struct {
33+
Value string `json:"value"`
34+
}
835

9-
Name string `json:"name,omitempty" validate:"omitempty,template_version_name"`
10-
Message string `json:"message,omitempty" validate:"lt=1048577"`
11-
TemplateID uuid.UUID `json:"template_id,omitempty" format:"uuid"`
36+
type ListUserSecretsResponse struct {
37+
Secrets []UserSecret `json:"secrets"`
1238
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy