Skip to content

Commit b642e2c

Browse files
committed
more tests and rbac fix
1 parent 305a5e9 commit b642e2c

File tree

13 files changed

+124
-24
lines changed

13 files changed

+124
-24
lines changed

coderd/coderd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,7 @@ func New(options *Options) *API {
918918
r.Route("/provisionerkeys", func(r chi.Router) {
919919
r.Get("/", api.provisionerKeys)
920920
r.Post("/", api.postProvisionerKey)
921-
r.Route("/{provisionerKey}", func(r chi.Router) {
921+
r.Route("/{provisionerkey}", func(r chi.Router) {
922922
r.Use(
923923
httpmw.ExtractProvisionerKeyParam(options.Database),
924924
)

coderd/database/dbauthz/dbauthz.go

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,10 +1075,7 @@ func (q *querier) DeleteOrganizationMember(ctx context.Context, arg database.Del
10751075
}
10761076

10771077
func (q *querier) DeleteProvisionerKey(ctx context.Context, id uuid.UUID) error {
1078-
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceProvisionerKeys); err != nil {
1079-
return err
1080-
}
1081-
return q.db.DeleteProvisionerKey(ctx, id)
1078+
return deleteQ(q.log, q.auth, q.db.GetProvisionerKeyByID, q.db.DeleteProvisionerKey)(ctx, id)
10821079
}
10831080

10841081
func (q *querier) DeleteReplicasUpdatedBefore(ctx context.Context, updatedAt time.Time) error {
@@ -1678,11 +1675,12 @@ func (q *querier) GetProvisionerJobsCreatedAfter(ctx context.Context, createdAt
16781675
return q.db.GetProvisionerJobsCreatedAfter(ctx, createdAt)
16791676
}
16801677

1678+
func (q *querier) GetProvisionerKeyByID(ctx context.Context, id uuid.UUID) (database.ProvisionerKey, error) {
1679+
return fetch(q.log, q.auth, q.db.GetProvisionerKeyByID)(ctx, id)
1680+
}
1681+
16811682
func (q *querier) GetProvisionerKeyByName(ctx context.Context, name database.GetProvisionerKeyByNameParams) (database.ProvisionerKey, error) {
1682-
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceProvisionerKeys); err != nil {
1683-
return database.ProvisionerKey{}, err
1684-
}
1685-
return q.db.GetProvisionerKeyByName(ctx, name)
1683+
return fetch(q.log, q.auth, q.db.GetProvisionerKeyByName)(ctx, name)
16861684
}
16871685

16881686
func (q *querier) GetProvisionerLogsAfterID(ctx context.Context, arg database.GetProvisionerLogsAfterIDParams) ([]database.ProvisionerJobLog, error) {
@@ -2630,10 +2628,7 @@ func (q *querier) InsertProvisionerJobLogs(ctx context.Context, arg database.Ins
26302628
}
26312629

26322630
func (q *querier) InsertProvisionerKey(ctx context.Context, arg database.InsertProvisionerKeyParams) (database.ProvisionerKey, error) {
2633-
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceProvisionerKeys); err != nil {
2634-
return database.ProvisionerKey{}, err
2635-
}
2636-
return q.db.InsertProvisionerKey(ctx, arg)
2631+
return insert(q.log, q.auth, rbac.ResourceProvisionerKeys.InOrg(arg.OrganizationID), q.db.InsertProvisionerKey)(ctx, arg)
26372632
}
26382633

26392634
func (q *querier) InsertReplica(ctx context.Context, arg database.InsertReplicaParams) (database.Replica, error) {
@@ -2865,10 +2860,7 @@ func (q *querier) InsertWorkspaceResourceMetadata(ctx context.Context, arg datab
28652860
}
28662861

28672862
func (q *querier) ListProvisionerKeysByOrganization(ctx context.Context, organizationID uuid.UUID) ([]database.ListProvisionerKeysByOrganizationRow, error) {
2868-
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceProvisionerKeys); err != nil {
2869-
return nil, err
2870-
}
2871-
return q.db.ListProvisionerKeysByOrganization(ctx, organizationID)
2863+
return fetchWithPostFilter(q.auth, policy.ActionRead, q.db.ListProvisionerKeysByOrganization)(ctx, organizationID)
28722864
}
28732865

28742866
func (q *querier) ListWorkspaceAgentPortShares(ctx context.Context, workspaceID uuid.UUID) ([]database.WorkspaceAgentPortShare, error) {

coderd/database/dbmem/dbmem.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3210,6 +3210,19 @@ func (q *FakeQuerier) GetProvisionerJobsCreatedAfter(_ context.Context, after ti
32103210
return jobs, nil
32113211
}
32123212

3213+
func (q *FakeQuerier) GetProvisionerKeyByID(ctx context.Context, id uuid.UUID) (database.ProvisionerKey, error) {
3214+
q.mutex.RLock()
3215+
defer q.mutex.RUnlock()
3216+
3217+
for _, key := range q.provisionerKeys {
3218+
if key.ID == id {
3219+
return key, nil
3220+
}
3221+
}
3222+
3223+
return database.ProvisionerKey{}, sql.ErrNoRows
3224+
}
3225+
32133226
func (q *FakeQuerier) GetProvisionerKeyByName(ctx context.Context, arg database.GetProvisionerKeyByNameParams) (database.ProvisionerKey, error) {
32143227
q.mutex.RLock()
32153228
defer q.mutex.RUnlock()

coderd/database/dbmetrics/dbmetrics.go

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

coderd/database/dbmock/dbmock.go

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

coderd/database/modelmethods.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@ func (p ProvisionerKey) RBACObject() rbac.Object {
218218
InOrg(p.OrganizationID)
219219
}
220220

221+
func (p ListProvisionerKeysByOrganizationRow) RBACObject() rbac.Object {
222+
return rbac.ResourceProvisionerKeys.
223+
WithID(p.ID).
224+
InOrg(p.OrganizationID)
225+
}
226+
221227
func (w WorkspaceProxy) RBACObject() rbac.Object {
222228
return rbac.ResourceWorkspaceProxy.
223229
WithID(w.ID)

coderd/database/querier.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

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

coderd/database/queries/provisionerkeys.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ INSERT INTO
1010
VALUES
1111
($1, $2, $3, $4, $5) RETURNING *;
1212

13+
-- name: GetProvisionerKeyByID :one
14+
SELECT
15+
*
16+
FROM
17+
provisioner_keys
18+
WHERE
19+
id = $1;
20+
1321
-- name: GetProvisionerKeyByName :one
1422
SELECT
1523
*

coderd/httpmw/provisionerkey.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type provisionerKeyParamContextKey struct{}
1515

1616
// ProvisionerKeyParam returns the user from the ExtractProvisionerKeyParam handler.
1717
func ProvisionerKeyParam(r *http.Request) database.ProvisionerKey {
18-
user, ok := r.Context().Value(userParamContextKey{}).(database.ProvisionerKey)
18+
user, ok := r.Context().Value(provisionerKeyParamContextKey{}).(database.ProvisionerKey)
1919
if !ok {
2020
panic("developer error: provisioner key parameter middleware not provided")
2121
}
@@ -30,10 +30,10 @@ func ExtractProvisionerKeyParam(db database.Store) func(http.Handler) http.Handl
3030
ctx := r.Context()
3131
organization := OrganizationParam(r)
3232

33-
provisionerKeyQuery := chi.URLParam(r, "provisionerKey")
33+
provisionerKeyQuery := chi.URLParam(r, "provisionerkey")
3434
if provisionerKeyQuery == "" {
3535
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
36-
Message: "\"provisionerKey\" must be provided.",
36+
Message: "\"provisionerkey\" must be provided.",
3737
})
3838
return
3939
}

coderd/provisionerkeys_test.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
func TestProvisionerKeys(t *testing.T) {
1616
t.Parallel()
1717

18-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
18+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong*10)
1919
t.Cleanup(cancel)
2020
client := coderdtest.New(t, nil)
2121
owner := coderdtest.CreateFirstUser(t, client)
@@ -70,7 +70,25 @@ func TestProvisionerKeys(t *testing.T) {
7070
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
7171
Name: "key",
7272
})
73-
require.Error(t, err, "org admin create provisioner key")
73+
require.ErrorContains(t, err, "already exists")
74+
75+
// key name cannot have special characters
76+
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
77+
Name: "key with spaces",
78+
})
79+
require.ErrorContains(t, err, "org admin create provisioner key")
80+
81+
// key name cannot be too long
82+
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
83+
Name: "key with spaces",
84+
})
85+
require.ErrorContains(t, err, "less than 64 characters")
86+
87+
// key name cannot be empty
88+
_, err = orgAdmin.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
89+
Name: "",
90+
})
91+
require.ErrorContains(t, err, "cannot be empty")
7492

7593
// org admin can list provisioner keys
7694
keys, err = orgAdmin.ListProvisionerKeys(ctx, owner.OrganizationID)
@@ -83,5 +101,5 @@ func TestProvisionerKeys(t *testing.T) {
83101

84102
// org admin cannot delete a provisioner key that doesn't exist
85103
err = orgAdmin.DeleteProvisionerKey(ctx, owner.OrganizationID, "key")
86-
require.Error(t, err, "org admin delete provisioner key")
104+
require.ErrorContains(t, err, "Resource not found")
87105
}

codersdk/provisionerdaemons.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ func (c *Client) ListProvisionerKeys(ctx context.Context, organizationID uuid.UU
310310
}
311311
defer res.Body.Close()
312312

313-
if res.StatusCode != http.StatusCreated {
313+
if res.StatusCode != http.StatusOK {
314314
return nil, ReadBodyAsError(res)
315315
}
316316
var resp []ProvisionerKey

site/src/api/typesGenerated.ts

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

0 commit comments

Comments
 (0)