Skip to content

Commit 8cafabd

Browse files
author
Will Toozs
committed
CLDSRV-430: add delete API implicit deny logic
1 parent 70766b8 commit 8cafabd

17 files changed

+28
-15
lines changed

lib/api/apiUtils/bucket/bucketDeletion.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function _deleteMPUbucket(destinationBucketName, log, cb) {
2424
});
2525
}
2626

27-
function _deleteOngoingMPUs(authInfo, bucketName, bucketMD, mpus, log, cb) {
27+
function _deleteOngoingMPUs(authInfo, bucketName, bucketMD, mpus, request, log, cb) {
2828
async.mapLimit(mpus, 1, (mpu, next) => {
2929
const splitterChar = mpu.key.includes(oldSplitter) ?
3030
oldSplitter : splitter;
@@ -40,7 +40,7 @@ function _deleteOngoingMPUs(authInfo, bucketName, bucketMD, mpus, log, cb) {
4040
byteLength: partSizeSum,
4141
});
4242
next(err);
43-
});
43+
}, request);
4444
}, cb);
4545
}
4646
/**
@@ -49,11 +49,13 @@ function _deleteOngoingMPUs(authInfo, bucketName, bucketMD, mpus, log, cb) {
4949
* @param {object} bucketMD - bucket attributes/metadata
5050
* @param {string} bucketName - bucket in which objectMetadata is stored
5151
* @param {string} canonicalID - account canonicalID of requester
52+
* @param {object} request - request object given by router
53+
* including normalized headers
5254
* @param {object} log - Werelogs logger
5355
* @param {function} cb - callback from async.waterfall in bucketDelete
5456
* @return {undefined}
5557
*/
56-
function deleteBucket(authInfo, bucketMD, bucketName, canonicalID, log, cb) {
58+
function deleteBucket(authInfo, bucketMD, bucketName, canonicalID, request, log, cb) {
5759
log.trace('deleting bucket from metadata');
5860
assert.strictEqual(typeof bucketName, 'string');
5961
assert.strictEqual(typeof canonicalID, 'string');
@@ -100,7 +102,7 @@ function deleteBucket(authInfo, bucketMD, bucketName, canonicalID, log, cb) {
100102
}
101103
if (objectsListRes.Contents.length) {
102104
return _deleteOngoingMPUs(authInfo, bucketName,
103-
bucketMD, objectsListRes.Contents, log, err => {
105+
bucketMD, objectsListRes.Contents, request, log, err => {
104106
if (err) {
105107
return next(err);
106108
}

lib/api/bucketDelete.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ function bucketDelete(authInfo, request, log, cb) {
3131
request,
3232
};
3333

34-
return metadataValidateBucket(metadataValParams, log,
34+
return metadataValidateBucket(metadataValParams, request.iamAuthzResults, log,
3535
(err, bucketMD) => {
3636
const corsHeaders = collectCorsHeaders(request.headers.origin,
3737
request.method, bucketMD);
@@ -43,7 +43,7 @@ function bucketDelete(authInfo, request, log, cb) {
4343
log.trace('passed checks',
4444
{ method: 'metadataValidateBucket' });
4545
return deleteBucket(authInfo, bucketMD, bucketName,
46-
authInfo.getCanonicalID(), log, err => {
46+
authInfo.getCanonicalID(), request, log, err => {
4747
if (err) {
4848
return cb(err, corsHeaders);
4949
}

lib/api/bucketDeleteCors.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ function bucketDeleteCors(authInfo, request, log, callback) {
3333
}
3434
log.trace('found bucket in metadata');
3535

36-
if (!isBucketAuthorized(bucket, requestType, canonicalID, authInfo, log, request)) {
36+
if (!isBucketAuthorized(bucket, requestType, canonicalID, authInfo,
37+
request.iamAuthzResults, log, request)) {
3738
log.debug('access denied for user on bucket', {
3839
requestType,
3940
method: 'bucketDeleteCors',

lib/api/bucketDeleteEncryption.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function bucketDeleteEncryption(authInfo, request, log, callback) {
2626
};
2727

2828
return async.waterfall([
29-
next => metadataValidateBucket(metadataValParams, log, next),
29+
next => metadataValidateBucket(metadataValParams, request.iamAuthzResults, log, next),
3030
(bucket, next) => checkExpectedBucketOwner(request.headers, bucket, log, err => next(err, bucket)),
3131
(bucket, next) => {
3232
const sseConfig = bucket.getServerSideEncryption();

lib/api/bucketDeleteLifecycle.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function bucketDeleteLifecycle(authInfo, request, log, callback) {
2020
requestType: 'bucketDeleteLifecycle',
2121
request,
2222
};
23-
return metadataValidateBucket(metadataValParams, log, (err, bucket) => {
23+
return metadataValidateBucket(metadataValParams, request.iamAuthzResults, log, (err, bucket) => {
2424
const corsHeaders = collectCorsHeaders(headers.origin, method, bucket);
2525
if (err) {
2626
log.debug('error processing request', {

lib/api/bucketDeletePolicy.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ function bucketDeletePolicy(authInfo, request, log, callback) {
1919
requestType: 'bucketDeletePolicy',
2020
request,
2121
};
22-
return metadataValidateBucket(metadataValParams, log, (err, bucket) => {
22+
return metadataValidateBucket(metadataValParams, request.iamAuthzResults, log, (err, bucket) => {
2323
const corsHeaders = collectCorsHeaders(headers.origin, method, bucket);
2424
if (err) {
2525
log.debug('error processing request', {

lib/api/bucketDeleteReplication.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function bucketDeleteReplication(authInfo, request, log, callback) {
2020
requestType: 'bucketDeleteReplication',
2121
request,
2222
};
23-
return metadataValidateBucket(metadataValParams, log, (err, bucket) => {
23+
return metadataValidateBucket(metadataValParams, request.iamAuthzResults, log, (err, bucket) => {
2424
const corsHeaders = collectCorsHeaders(headers.origin, method, bucket);
2525
if (err) {
2626
log.debug('error processing request', {

lib/api/bucketDeleteWebsite.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ function bucketDeleteWebsite(authInfo, request, log, callback) {
2525
}
2626
log.trace('found bucket in metadata');
2727

28-
if (!isBucketAuthorized(bucket, requestType, canonicalID, authInfo, log, request)) {
28+
if (!isBucketAuthorized(bucket, requestType, canonicalID, authInfo,
29+
request.iamAuthzResults, log, request)) {
2930
log.debug('access denied for user on bucket', {
3031
requestType,
3132
method: 'bucketDeleteWebsite',

lib/api/objectDelete.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ function objectDelete(authInfo, request, log, cb) {
5656
const canonicalID = authInfo.getCanonicalID();
5757
return async.waterfall([
5858
function validateBucketAndObj(next) {
59-
return metadataValidateBucketAndObj(valParams, log,
60-
(err, bucketMD, objMD) => {
59+
return metadataValidateBucketAndObj(valParams, request.iamAuthzResults, log,
60+
(err, bucketMD, objMD) => {
6161
if (err) {
6262
return next(err, bucketMD);
6363
}

lib/api/objectDeleteTagging.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ function objectDeleteTagging(authInfo, request, log, callback) {
4646
};
4747

4848
return async.waterfall([
49-
next => metadataValidateBucketAndObj(metadataValParams, log,
49+
next => metadataValidateBucketAndObj(metadataValParams, request.iamAuthzResults, log,
5050
(err, bucket, objectMD) => {
5151
if (err) {
5252
log.trace('request authorization failed',

0 commit comments

Comments
 (0)