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)