@@ -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
}