Skip to content

Commit 4fe26e9

Browse files
committed
Start removing QueryByRelated
1 parent 073aa2c commit 4fe26e9

File tree

1 file changed

+37
-31
lines changed

1 file changed

+37
-31
lines changed

coderd/authzquery/workspace.go

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ func (q *AuthzQuerier) GetWorkspaces(ctx context.Context, arg database.GetWorksp
2828
}
2929

3030
func (q *AuthzQuerier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) {
31-
_, err := q.GetWorkspaceByID(ctx, workspaceID)
32-
if err != nil {
31+
if _, err := q.GetWorkspaceByID(ctx, workspaceID); err != nil {
3332
return database.WorkspaceBuild{}, nil
3433
}
3534
return q.db.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspaceID)
@@ -50,8 +49,7 @@ func (q *AuthzQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Contex
5049
}
5150

5251
func (q *AuthzQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (database.WorkspaceAgent, error) {
53-
_, err := q.GetWorkspaceByAgentID(ctx, id)
54-
if err != nil {
52+
if _, err := q.GetWorkspaceByAgentID(ctx, id); err != nil {
5553
return database.WorkspaceAgent{}, err
5654
}
5755
return q.db.GetWorkspaceAgentByID(ctx, id)
@@ -62,10 +60,15 @@ func (q *AuthzQuerier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID)
6260
// is essentially an auth token. But the caller using this function is not
6361
// an authenticated user. So this authz check will fail.
6462
func (q *AuthzQuerier) GetWorkspaceAgentByInstanceID(ctx context.Context, authInstanceID string) (database.WorkspaceAgent, error) {
65-
fetch := func(agent database.WorkspaceAgent, _ string) (database.Workspace, error) {
66-
return q.db.GetWorkspaceByAgentID(ctx, agent.ID)
63+
agent, err := q.db.GetWorkspaceAgentByInstanceID(ctx, authInstanceID)
64+
if err != nil {
65+
return database.WorkspaceAgent{}, err
66+
}
67+
_, err = q.GetWorkspaceByAgentID(ctx, agent.ID)
68+
if err != nil {
69+
return database.WorkspaceAgent{}, err
6770
}
68-
return queryWithRelated(q.log, q.auth, rbac.ActionRead, fetch, q.db.GetWorkspaceAgentByInstanceID)(ctx, authInstanceID)
71+
return agent, nil
6972
}
7073

7174
// GetWorkspaceAgentsByResourceIDs is an all or nothing call. If the user cannot read
@@ -116,20 +119,18 @@ func (q *AuthzQuerier) UpdateWorkspaceAgentLifecycleStateByID(ctx context.Contex
116119

117120
func (q *AuthzQuerier) GetWorkspaceAppByAgentIDAndSlug(ctx context.Context, arg database.GetWorkspaceAppByAgentIDAndSlugParams) (database.WorkspaceApp, error) {
118121
// If we can fetch the workspace, we can fetch the apps. Use the authorized call.
119-
_, err := q.GetWorkspaceByAgentID(ctx, arg.AgentID)
120-
if err != nil {
122+
if _, err := q.GetWorkspaceByAgentID(ctx, arg.AgentID); err != nil {
121123
return database.WorkspaceApp{}, err
122124
}
123125

124126
return q.db.GetWorkspaceAppByAgentIDAndSlug(ctx, arg)
125127
}
126128

127129
func (q *AuthzQuerier) GetWorkspaceAppsByAgentID(ctx context.Context, agentID uuid.UUID) ([]database.WorkspaceApp, error) {
128-
fetch := func(_ []database.WorkspaceApp, agentID uuid.UUID) (database.Workspace, error) {
129-
return q.db.GetWorkspaceByAgentID(ctx, agentID)
130+
if _, err := q.GetWorkspaceByAgentID(ctx, agentID); err != nil {
131+
return nil, err
130132
}
131-
132-
return queryWithRelated(q.log, q.auth, rbac.ActionRead, fetch, q.db.GetWorkspaceAppsByAgentID)(ctx, agentID)
133+
return q.db.GetWorkspaceAppsByAgentID(ctx, agentID)
133134
}
134135

135136
// GetWorkspaceAppsByAgentIDs is an all or nothing call. If the user cannot read a single app, the entire call will fail.
@@ -146,16 +147,15 @@ func (q *AuthzQuerier) GetWorkspaceAppsByAgentIDs(ctx context.Context, ids []uui
146147
return q.db.GetWorkspaceAppsByAgentIDs(ctx, ids)
147148
}
148149

149-
func (q *AuthzQuerier) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (database.WorkspaceBuild, error) {
150-
fetch := func(build database.WorkspaceBuild, _ uuid.UUID) (database.Workspace, error) {
151-
return q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
150+
func (q *AuthzQuerier) GetWorkspaceBuildByID(ctx context.Context, buildID uuid.UUID) (database.WorkspaceBuild, error) {
151+
build, err := q.db.GetWorkspaceBuildByID(ctx, buildID)
152+
if err != nil {
153+
return database.WorkspaceBuild{}, err
152154
}
153-
return queryWithRelated(
154-
q.log,
155-
q.auth,
156-
rbac.ActionRead,
157-
fetch,
158-
q.db.GetWorkspaceBuildByID)(ctx, id)
155+
if _, err := q.GetWorkspaceByID(ctx, build.WorkspaceID); err != nil {
156+
return database.WorkspaceBuild{}, err
157+
}
158+
return build, nil
159159
}
160160

161161
func (q *AuthzQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (database.WorkspaceBuild, error) {
@@ -172,10 +172,10 @@ func (q *AuthzQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.
172172
}
173173

174174
func (q *AuthzQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) {
175-
fetch := func(_ database.WorkspaceBuild, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.Workspace, error) {
176-
return q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
175+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
176+
return database.WorkspaceBuild{}, err
177177
}
178-
return queryWithRelated(q.log, q.auth, rbac.ActionRead, fetch, q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber)(ctx, arg)
178+
return q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx, arg)
179179
}
180180

181181
func (q *AuthzQuerier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuildID uuid.UUID) ([]database.WorkspaceBuildParameter, error) {
@@ -190,10 +190,10 @@ func (q *AuthzQuerier) GetWorkspaceBuildParameters(ctx context.Context, workspac
190190
}
191191

192192
func (q *AuthzQuerier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDParams) ([]database.WorkspaceBuild, error) {
193-
fetch := func(_ []database.WorkspaceBuild, arg database.GetWorkspaceBuildsByWorkspaceIDParams) (database.Workspace, error) {
194-
return q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
193+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
194+
return nil, err
195195
}
196-
return queryWithRelated(q.log, q.auth, rbac.ActionRead, fetch, q.db.GetWorkspaceBuildsByWorkspaceID)(ctx, arg)
196+
return q.db.GetWorkspaceBuildsByWorkspaceID(ctx, arg)
197197
}
198198

199199
func (q *AuthzQuerier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.Workspace, error) {
@@ -304,15 +304,21 @@ func (q *AuthzQuerier) InsertWorkspace(ctx context.Context, arg database.InsertW
304304
}
305305

306306
func (q *AuthzQuerier) InsertWorkspaceBuild(ctx context.Context, arg database.InsertWorkspaceBuildParams) (database.WorkspaceBuild, error) {
307-
fetch := func(build database.WorkspaceBuild, arg database.InsertWorkspaceBuildParams) (database.Workspace, error) {
308-
return q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
307+
w, err := q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
308+
if err != nil {
309+
return database.WorkspaceBuild{}, err
309310
}
310311

311312
var action rbac.Action = rbac.ActionUpdate
312313
if arg.Transition == database.WorkspaceTransitionDelete {
313314
action = rbac.ActionDelete
314315
}
315-
return queryWithRelated(q.log, q.auth, action, fetch, q.db.InsertWorkspaceBuild)(ctx, arg)
316+
317+
if err = q.authorizeContext(ctx, action, w); err != nil {
318+
return database.WorkspaceBuild{}, err
319+
}
320+
321+
return q.db.InsertWorkspaceBuild(ctx, arg)
316322
}
317323

318324
func (q *AuthzQuerier) InsertWorkspaceBuildParameters(ctx context.Context, arg database.InsertWorkspaceBuildParametersParams) error {

0 commit comments

Comments
 (0)