@@ -1167,12 +1167,25 @@ func (q *querier) GetWorkspaces(ctx context.Context, arg database.GetWorkspacesP
1167
1167
return q.db.GetAuthorizedWorkspaces(ctx, arg, prep)
1168
1168
}
1169
1169
1170
- func (q *querier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
1171
- return fetch(q.log, q.auth, q.db.GetLatestWorkspaceBuildByWorkspaceID)(ctx, workspaceID)
1170
+ func (q *querier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) {
1171
+ if _, err := q.GetWorkspaceByID(ctx, workspaceID); err != nil {
1172
+ return database.WorkspaceBuild{}, err
1173
+ }
1174
+ return q.db.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspaceID)
1172
1175
}
1173
1176
1174
- func (q *querier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, ids []uuid.UUID) ([]database.WorkspaceBuildRBAC, error) {
1175
- return fetchWithPostFilter(q.auth, q.db.GetLatestWorkspaceBuildsByWorkspaceIDs)(ctx, ids)
1177
+ func (q *querier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, ids []uuid.UUID) ([]database.WorkspaceBuild, error) {
1178
+ // This is not ideal as not all builds will be returned if the workspace cannot be read.
1179
+ // This should probably be handled differently? Maybe join workspace builds with workspace
1180
+ // ownership properties and filter on that.
1181
+ for _, id := range ids {
1182
+ _, err := q.GetWorkspaceByID(ctx, id)
1183
+ if err != nil {
1184
+ return nil, err
1185
+ }
1186
+ }
1187
+
1188
+ return q.db.GetLatestWorkspaceBuildsByWorkspaceIDs(ctx, ids)
1176
1189
}
1177
1190
1178
1191
func (q *querier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (database.WorkspaceAgent, error) {
@@ -1250,16 +1263,35 @@ func (q *querier) GetWorkspaceAppsByAgentID(ctx context.Context, agentID uuid.UU
1250
1263
return q.db.GetWorkspaceAppsByAgentID(ctx, agentID)
1251
1264
}
1252
1265
1253
- func (q *querier) GetWorkspaceBuildByID(ctx context.Context, buildID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
1254
- return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByID)(ctx, buildID)
1266
+ func (q *querier) GetWorkspaceBuildByID(ctx context.Context, buildID uuid.UUID) (database.WorkspaceBuild, error) {
1267
+ build, err := q.db.GetWorkspaceBuildByID(ctx, buildID)
1268
+ if err != nil {
1269
+ return database.WorkspaceBuild{}, err
1270
+ }
1271
+ if _, err := q.GetWorkspaceByID(ctx, build.WorkspaceID); err != nil {
1272
+ return database.WorkspaceBuild{}, err
1273
+ }
1274
+ return build, nil
1255
1275
}
1256
1276
1257
- func (q *querier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
1258
- return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByJobID)(ctx, jobID)
1277
+ func (q *querier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (database.WorkspaceBuild, error) {
1278
+ build, err := q.db.GetWorkspaceBuildByJobID(ctx, jobID)
1279
+ if err != nil {
1280
+ return database.WorkspaceBuild{}, err
1281
+ }
1282
+ // Authorized fetch
1283
+ _, err = q.GetWorkspaceByID(ctx, build.WorkspaceID)
1284
+ if err != nil {
1285
+ return database.WorkspaceBuild{}, err
1286
+ }
1287
+ return build, nil
1259
1288
}
1260
1289
1261
- func (q *querier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuildRBAC, error) {
1262
- return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber)(ctx, arg)
1290
+ func (q *querier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) {
1291
+ if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
1292
+ return database.WorkspaceBuild{}, err
1293
+ }
1294
+ return q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx, arg)
1263
1295
}
1264
1296
1265
1297
func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuildID uuid.UUID) ([]database.WorkspaceBuildParameter, error) {
@@ -1273,20 +1305,11 @@ func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuil
1273
1305
return q.db.GetWorkspaceBuildParameters(ctx, workspaceBuildID)
1274
1306
}
1275
1307
1276
- func (q *querier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDParams) ([]database.WorkspaceBuildRBAC, error) {
1277
- builds, err := q.db.GetWorkspaceBuildsByWorkspaceID(ctx, arg)
1278
- if err != nil {
1279
- return nil, err
1280
- }
1281
- if len(builds) == 0 {
1282
- return []database.WorkspaceBuildRBAC{}, nil
1283
- }
1284
- // All builds come from the same workspace, so we only need to check the first one.
1285
- err = q.authorizeContext(ctx, rbac.ActionRead, builds[0])
1286
- if err != nil {
1308
+ func (q *querier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDParams) ([]database.WorkspaceBuild, error) {
1309
+ if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
1287
1310
return nil, err
1288
1311
}
1289
- return builds, nil
1312
+ return q.db.GetWorkspaceBuildsByWorkspaceID(ctx, arg)
1290
1313
}
1291
1314
1292
1315
func (q *querier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.Workspace, error) {
@@ -1346,7 +1369,11 @@ func (q *querier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.U
1346
1369
if err != nil {
1347
1370
return nil, err
1348
1371
}
1349
- obj = build
1372
+ workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
1373
+ if err != nil {
1374
+ return nil, err
1375
+ }
1376
+ obj = workspace
1350
1377
default:
1351
1378
return nil, xerrors.Errorf("unknown job type: %s", job.Type)
1352
1379
}
@@ -1387,7 +1414,12 @@ func (q *querier) InsertWorkspaceBuildParameters(ctx context.Context, arg databa
1387
1414
return err
1388
1415
}
1389
1416
1390
- err = q.authorizeContext(ctx, rbac.ActionUpdate, build)
1417
+ workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
1418
+ if err != nil {
1419
+ return err
1420
+ }
1421
+
1422
+ err = q.authorizeContext(ctx, rbac.ActionUpdate, workspace)
1391
1423
if err != nil {
1392
1424
return err
1393
1425
}
@@ -1451,7 +1483,11 @@ func (q *querier) UpdateWorkspaceBuildByID(ctx context.Context, arg database.Upd
1451
1483
return database.WorkspaceBuild{}, err
1452
1484
}
1453
1485
1454
- err = q.authorizeContext(ctx, rbac.ActionUpdate, build)
1486
+ workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
1487
+ if err != nil {
1488
+ return database.WorkspaceBuild{}, err
1489
+ }
1490
+ err = q.authorizeContext(ctx, rbac.ActionUpdate, workspace.RBACObject())
1455
1491
if err != nil {
1456
1492
return database.WorkspaceBuild{}, err
1457
1493
}
0 commit comments