Skip to content

Commit 4967fe6

Browse files
committed
Fix fetch dry run template version from job id
We need to find a better solution imo
1 parent 69a6346 commit 4967fe6

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

coderd/authzquery/job.go

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package authzquery
22

33
import (
44
"context"
5+
"encoding/json"
56

67
"github.com/google/uuid"
78
"golang.org/x/xerrors"
@@ -51,7 +52,8 @@ func (q *AuthzQuerier) UpdateProvisionerJobWithCancelByID(ctx context.Context, a
5152
return err
5253
}
5354
case database.ProvisionerJobTypeTemplateVersionDryRun, database.ProvisionerJobTypeTemplateVersionImport:
54-
templateVersion, err := q.database.GetTemplateVersionByJobID(ctx, arg.ID)
55+
// Authorized call to get template version.
56+
templateVersion, err := authorizedTemplateVersionFromJob(ctx, q, job)
5557
if err != nil {
5658
return err
5759
}
@@ -91,9 +93,9 @@ func (q *AuthzQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID)
9193
if err != nil {
9294
return database.ProvisionerJob{}, err
9395
}
94-
case database.ProvisionerJobTypeTemplateVersionImport, database.ProvisionerJobTypeTemplateVersionDryRun:
96+
case database.ProvisionerJobTypeTemplateVersionDryRun, database.ProvisionerJobTypeTemplateVersionImport:
9597
// Authorized call to get template version.
96-
_, err := q.GetTemplateVersionByJobID(ctx, id)
98+
_, err := authorizedTemplateVersionFromJob(ctx, q, job)
9799
if err != nil {
98100
return database.ProvisionerJob{}, err
99101
}
@@ -103,3 +105,33 @@ func (q *AuthzQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID)
103105

104106
return job, nil
105107
}
108+
109+
func authorizedTemplateVersionFromJob(ctx context.Context, q *AuthzQuerier, job database.ProvisionerJob) (database.TemplateVersion, error) {
110+
switch job.Type {
111+
case database.ProvisionerJobTypeTemplateVersionDryRun:
112+
// TODO: This is really unfortunate that we need to inspect the json
113+
// payload. We should fix this.
114+
tmp := struct {
115+
TemplateVersionID uuid.UUID `json:"template_version_id"`
116+
}{}
117+
err := json.Unmarshal(job.Input, &tmp)
118+
if err != nil {
119+
return database.TemplateVersion{}, xerrors.Errorf("dry-run unmarshal: %w", err)
120+
}
121+
// Authorized call to get template version.
122+
tv, err := q.GetTemplateVersionByID(ctx, tmp.TemplateVersionID)
123+
if err != nil {
124+
return database.TemplateVersion{}, err
125+
}
126+
return tv, nil
127+
case database.ProvisionerJobTypeTemplateVersionImport:
128+
// Authorized call to get template version.
129+
tv, err := q.GetTemplateVersionByJobID(ctx, job.ID)
130+
if err != nil {
131+
return database.TemplateVersion{}, err
132+
}
133+
return tv, nil
134+
default:
135+
return database.TemplateVersion{}, xerrors.Errorf("unknown job type: %q", job.Type)
136+
}
137+
}

coderd/authzquery/workspace.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,13 @@ func (q *AuthzQuerier) GetWorkspaceResourceMetadataByResourceIDs(ctx context.Con
258258
func (q *AuthzQuerier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.UUID) ([]database.WorkspaceResource, error) {
259259
build, err := q.database.GetWorkspaceBuildByJobID(ctx, jobID)
260260
if err != nil {
261-
return nil, nil
261+
return nil, err
262262
}
263263

264264
// If the workspace can be read, then the resource can be read.
265265
_, err = authorizedFetch(q.authorizer, q.database.GetWorkspaceByID)(ctx, build.WorkspaceID)
266266
if err != nil {
267-
return nil, nil
267+
return nil, err
268268
}
269269
return q.database.GetWorkspaceResourcesByJobID(ctx, jobID)
270270
}

0 commit comments

Comments
 (0)