Skip to content

Commit a11b108

Browse files
committed
add api routes
1 parent 1a5deb8 commit a11b108

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed

coderd/coderd.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,16 @@ func New(options *Options) *API {
915915
})
916916
})
917917
})
918+
r.Route("/provisionerkeys", func(r chi.Router) {
919+
r.Get("/", api.provisionerKeys)
920+
r.Post("/", api.postProvisionerKey)
921+
r.Route("/{provisionerKey}", func(r chi.Router) {
922+
r.Use(
923+
httpmw.ExtractProvisionerKeyParam(options.Database),
924+
)
925+
r.Delete("/", api.deleteProvisionerKey)
926+
})
927+
})
918928
})
919929
})
920930
r.Route("/templates", func(r chi.Router) {

coderd/notifications/manager_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414

1515
"github.com/coder/serpent"
1616

17+
"github.com/coder/serpent"
18+
1719
"github.com/coder/coder/v2/coderd/database"
1820
"github.com/coder/coder/v2/coderd/database/dbgen"
1921
"github.com/coder/coder/v2/coderd/notifications"

coderd/provisionerkeys.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package coderd
2+
3+
import (
4+
"database/sql"
5+
"errors"
6+
"net/http"
7+
8+
"github.com/coder/coder/v2/coderd/database"
9+
"github.com/coder/coder/v2/coderd/httpapi"
10+
"github.com/coder/coder/v2/coderd/httpmw"
11+
"github.com/coder/coder/v2/coderd/provisionerkey"
12+
"github.com/coder/coder/v2/codersdk"
13+
)
14+
15+
func (api *API) postProvisionerKey(rw http.ResponseWriter, r *http.Request) {
16+
ctx := r.Context()
17+
organization := httpmw.OrganizationParam(r)
18+
19+
var req codersdk.CreateProvisionerKeyRequest
20+
if !httpapi.Read(ctx, rw, r, &req) {
21+
return
22+
}
23+
24+
params, token, err := provisionerkey.New(organization.ID, req.Name)
25+
if err != nil {
26+
httpapi.InternalServerError(rw, err)
27+
return
28+
}
29+
30+
_, err = api.Database.InsertProvisionerKey(ctx, params)
31+
if err != nil {
32+
httpapi.InternalServerError(rw, err)
33+
return
34+
}
35+
36+
httpapi.Write(ctx, rw, http.StatusCreated, codersdk.CreateProvisionerKeyResponse{
37+
Key: token,
38+
})
39+
}
40+
41+
func (api *API) provisionerKeys(rw http.ResponseWriter, r *http.Request) {
42+
ctx := r.Context()
43+
organization := httpmw.OrganizationParam(r)
44+
45+
pks, err := api.Database.ListProvisionerKeysByOrganization(ctx, organization.ID)
46+
if err != nil {
47+
httpapi.InternalServerError(rw, err)
48+
return
49+
}
50+
51+
httpapi.Write(ctx, rw, http.StatusOK, convertProvisionerKeys(pks))
52+
}
53+
54+
func (api *API) deleteProvisionerKey(rw http.ResponseWriter, r *http.Request) {
55+
ctx := r.Context()
56+
organization := httpmw.OrganizationParam(r)
57+
provisionerKey := httpmw.ProvisionerKeyParam(r)
58+
59+
pk, err := api.Database.GetProvisionerKeyByName(ctx, database.GetProvisionerKeyByNameParams{
60+
OrganizationID: organization.ID,
61+
Name: provisionerKey.Name,
62+
})
63+
if err != nil {
64+
if errors.Is(err, sql.ErrNoRows) {
65+
httpapi.ResourceNotFound(rw)
66+
return
67+
}
68+
httpapi.InternalServerError(rw, err)
69+
return
70+
}
71+
72+
err = api.Database.DeleteProvisionerKey(ctx, pk.ID)
73+
if err != nil {
74+
httpapi.InternalServerError(rw, err)
75+
return
76+
}
77+
78+
httpapi.Write(ctx, rw, http.StatusNoContent, nil)
79+
}
80+
81+
func convertProvisionerKeys(dbKeys []database.ListProvisionerKeysByOrganizationRow) []codersdk.ProvisionerKey {
82+
keys := make([]codersdk.ProvisionerKey, 0, len(dbKeys))
83+
for _, dbKey := range dbKeys {
84+
keys = append(keys, codersdk.ProvisionerKey{
85+
ID: dbKey.ID,
86+
CreatedAt: dbKey.CreatedAt,
87+
OrganizationID: dbKey.OrganizationID,
88+
Name: dbKey.Name,
89+
})
90+
}
91+
return keys
92+
}

0 commit comments

Comments
 (0)