@@ -1310,38 +1310,37 @@ const indexingSchema = joi.array().items(indexEntrySchema).min(1);
1310
1310
1311
1311
function respondToRequest ( err , response , log , callback ) {
1312
1312
responseJSONBody ( err , null , response , log ) ;
1313
- return callback ( err ) ;
1313
+ // The callback is optional, as it is only used for testing purposes
1314
+ // but value may be set to non-undefined or null due to the arsenal
1315
+ // routes implementation
1316
+ if ( callback && typeof callback === 'function' ) {
1317
+ return callback ( err ) ;
1318
+ }
1319
+ return undefined ;
1314
1320
}
1315
1321
1316
1322
function routeIndexingAPIs ( request , response , userInfo , log , callback ) {
1317
1323
const route = backbeatRoutes [ request . method ] [ request . resourceType ] ;
1318
1324
1319
1325
if ( ! [ 'GET' , 'POST' ] . includes ( request . method ) ) {
1320
- responseJSONBody ( errors . MethodNotAllowed , null , response , log ) ;
1321
- return callback ( errors . MethodNotAllowed ) ;
1326
+ return respondToRequest ( errors . MethodNotAllowed , response , log , callback ) ;
1322
1327
}
1323
1328
1324
1329
if ( request . method === 'GET' ) {
1325
- return route ( request , response , userInfo , log , err => {
1326
- if ( err ) {
1327
- responseJSONBody ( err , null , response , log ) ;
1328
- }
1329
- return callback ( err ) ;
1330
- } ) ;
1330
+ return route ( request , response , userInfo , log , err =>
1331
+ respondToRequest ( err , response , log , callback ) ) ;
1331
1332
}
1332
1333
1333
1334
const op = request . query . operation ;
1334
1335
1335
1336
if ( ! op || typeof route [ op ] !== 'function' ) {
1336
1337
log . error ( 'Invalid operataion parameter' , { operation : op } ) ;
1337
- responseJSONBody ( errors . BadRequest , null , response , log ) ;
1338
- return callback ( errors . BadRequest ) ;
1338
+ return respondToRequest ( errors . BadRequest , response , log , callback ) ;
1339
1339
}
1340
1340
1341
1341
return _getRequestPayload ( request , ( err , payload ) => {
1342
1342
if ( err ) {
1343
- responseJSONBody ( err , null , response , log ) ;
1344
- return callback ( err ) ;
1343
+ return respondToRequest ( err , response , log , callback ) ;
1345
1344
}
1346
1345
1347
1346
let parsedIndex ;
@@ -1350,16 +1349,11 @@ function routeIndexingAPIs(request, response, userInfo, log, callback) {
1350
1349
parsedIndex = joi . attempt ( JSON . parse ( payload ) , indexingSchema , 'invalid payload' ) ;
1351
1350
} catch ( err ) {
1352
1351
log . error ( 'Unable to parse index request body' , { error : err } ) ;
1353
- responseJSONBody ( errors . BadRequest , null , response , log ) ;
1354
- return callback ( errors . BadRequest ) ;
1352
+ return respondToRequest ( errors . BadRequest , response , log , callback ) ;
1355
1353
}
1356
1354
1357
- return route [ op ] ( parsedIndex , request , response , userInfo , log , err => {
1358
- if ( err ) {
1359
- responseJSONBody ( err , null , response , log ) ;
1360
- }
1361
- return callback ( err ) ;
1362
- } ) ;
1355
+ return route [ op ] ( parsedIndex , request , response , userInfo , log , err =>
1356
+ respondToRequest ( err , response , log , callback ) ) ;
1363
1357
} ) ;
1364
1358
}
1365
1359
@@ -1477,10 +1471,11 @@ function routeBackbeat(clientIP, request, response, log, callback) {
1477
1471
resourceType : request . resourceType ,
1478
1472
query : request . query ,
1479
1473
} ) ;
1480
- responseJSONBody ( errors . MethodNotAllowed , null , response , log ) ;
1481
- return callback ( errors . MethodNotAllowed ) ;
1474
+ return respondToRequest ( errors . MethodNotAllowed , response , log , callback ) ;
1482
1475
}
1483
1476
1477
+ const isObjectRequest = _isObjectRequest ( request ) ;
1478
+
1484
1479
return async . waterfall ( [
1485
1480
next => auth . server . doAuth (
1486
1481
request , log , ( err , userInfo , authorizationResults , streamingV4Params , infos ) => {
@@ -1501,7 +1496,7 @@ function routeBackbeat(clientIP, request, response, log, callback) {
1501
1496
next ( err , userInfo ) ) ,
1502
1497
( userInfo , next ) => {
1503
1498
// TODO: understand why non-object requests (batchdelete) were not authenticated
1504
- if ( ! _isObjectRequest ( request ) ) {
1499
+ if ( ! isObjectRequest ) {
1505
1500
if ( userInfo . getCanonicalID ( ) === constants . publicId ) {
1506
1501
log . debug ( `unauthenticated access to backbeat ${ request . resourceType } routes` , {
1507
1502
method : request . method ,
@@ -1543,6 +1538,10 @@ function routeBackbeat(clientIP, request, response, log, callback) {
1543
1538
return standardMetadataValidateBucketAndObj ( mdValParams , request . actionImplicitDenies , log , next ) ;
1544
1539
} ,
1545
1540
( bucketInfo , objMd , next ) => {
1541
+ // Function was already called
1542
+ if ( ! isObjectRequest ) {
1543
+ return next ( ) ;
1544
+ }
1546
1545
if ( ! useMultipleBackend ) {
1547
1546
return backbeatRoutes [ request . method ] [ request . resourceType ] (
1548
1547
request , response , bucketInfo , objMd , log , next ) ;
0 commit comments