@@ -1167,25 +1167,12 @@ 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.WorkspaceBuild , error ) {
1171
- if _ , err := q .GetWorkspaceByID (ctx , workspaceID ); err != nil {
1172
- return database.WorkspaceBuild {}, err
1173
- }
1174
- return q .db .GetLatestWorkspaceBuildByWorkspaceID (ctx , workspaceID )
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 )
1175
1172
}
1176
1173
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 )
1174
+ func (q * querier ) GetLatestWorkspaceBuildsByWorkspaceIDs (ctx context.Context , ids []uuid.UUID ) ([]database.WorkspaceBuildRBAC , error ) {
1175
+ return fetchWithPostFilter (q .auth , q .db .GetLatestWorkspaceBuildsByWorkspaceIDs )(ctx , ids )
1189
1176
}
1190
1177
1191
1178
func (q * querier ) GetWorkspaceAgentByID (ctx context.Context , id uuid.UUID ) (database.WorkspaceAgent , error ) {
@@ -1263,35 +1250,16 @@ func (q *querier) GetWorkspaceAppsByAgentID(ctx context.Context, agentID uuid.UU
1263
1250
return q .db .GetWorkspaceAppsByAgentID (ctx , agentID )
1264
1251
}
1265
1252
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
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 )
1275
1255
}
1276
1256
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
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 )
1288
1259
}
1289
1260
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 )
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 )
1295
1263
}
1296
1264
1297
1265
func (q * querier ) GetWorkspaceBuildParameters (ctx context.Context , workspaceBuildID uuid.UUID ) ([]database.WorkspaceBuildParameter , error ) {
@@ -1305,11 +1273,20 @@ func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuil
1305
1273
return q .db .GetWorkspaceBuildParameters (ctx , workspaceBuildID )
1306
1274
}
1307
1275
1308
- func (q * querier ) GetWorkspaceBuildsByWorkspaceID (ctx context.Context , arg database.GetWorkspaceBuildsByWorkspaceIDParams ) ([]database.WorkspaceBuild , error ) {
1309
- if _ , err := q .GetWorkspaceByID (ctx , arg .WorkspaceID ); err != nil {
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 {
1310
1287
return nil , err
1311
1288
}
1312
- return q . db . GetWorkspaceBuildsByWorkspaceID ( ctx , arg )
1289
+ return builds , nil
1313
1290
}
1314
1291
1315
1292
func (q * querier ) GetWorkspaceByAgentID (ctx context.Context , agentID uuid.UUID ) (database.Workspace , error ) {
@@ -1369,11 +1346,7 @@ func (q *querier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.U
1369
1346
if err != nil {
1370
1347
return nil , err
1371
1348
}
1372
- workspace , err := q .db .GetWorkspaceByID (ctx , build .WorkspaceID )
1373
- if err != nil {
1374
- return nil , err
1375
- }
1376
- obj = workspace
1349
+ obj = build
1377
1350
default :
1378
1351
return nil , xerrors .Errorf ("unknown job type: %s" , job .Type )
1379
1352
}
@@ -1414,12 +1387,7 @@ func (q *querier) InsertWorkspaceBuildParameters(ctx context.Context, arg databa
1414
1387
return err
1415
1388
}
1416
1389
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 )
1390
+ err = q .authorizeContext (ctx , rbac .ActionUpdate , build )
1423
1391
if err != nil {
1424
1392
return err
1425
1393
}
@@ -1483,11 +1451,7 @@ func (q *querier) UpdateWorkspaceBuildByID(ctx context.Context, arg database.Upd
1483
1451
return database.WorkspaceBuild {}, err
1484
1452
}
1485
1453
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 ())
1454
+ err = q .authorizeContext (ctx , rbac .ActionUpdate , build )
1491
1455
if err != nil {
1492
1456
return database.WorkspaceBuild {}, err
1493
1457
}
0 commit comments