Skip to content

Commit 4aa9ea0

Browse files
committed
✨ process attributes as lower case
Issue: CLDSRV-813
1 parent a8b6808 commit 4aa9ea0

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

lib/api/bucketGet.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,11 @@ function bucketGet(authInfo, request, log, callback) {
323323
const v2 = params['list-type'];
324324

325325
const optionalAttributes =
326-
request.headers['x-amz-optional-object-attributes']?.split(',').map(attr => attr.trim()) ?? [];
326+
request.headers['x-amz-optional-object-attributes']
327+
?.split(',')
328+
.map(attr => attr.trim())
329+
.map(attr => attr !== 'RestoreStatus' ? attr.toLowerCase() : attr)
330+
?? [];
327331
if (optionalAttributes.some(attr => !attr.startsWith('x-amz-meta-') && attr != 'RestoreStatus')) {
328332
return callback(
329333
errorInstances.InvalidArgument.customizeDescription('Invalid attribute name specified')

tests/unit/api/bucketGet.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,5 +533,36 @@ describe('bucketGet API V2', () => {
533533
done();
534534
});
535535
});
536+
537+
it('should return user metadata as case insentive (lowercase header)', done => {
538+
const objectNameMeta = 'objectWithMeta';
539+
const putRequest = new DummyRequest({
540+
bucketName,
541+
headers: { 'x-amz-meta-color': 'yellow' },
542+
url: `/${bucketName}/${objectNameMeta}`,
543+
namespace,
544+
objectKey: objectNameMeta,
545+
}, postBody);
546+
547+
const testGetRequest = Object.assign({
548+
query: {},
549+
url: baseUrl,
550+
}, baseGetRequest);
551+
testGetRequest.headers['x-amz-optional-object-attributes'] = 'x-amz-meta-coLor';
552+
553+
async.waterfall([
554+
next => bucketPut(authInfo, testPutBucketRequest, log, next),
555+
(_, next) => objectPut(authInfo, putRequest, undefined, log, next),
556+
(_, next) => bucketGet(authInfo, testGetRequest, log, next),
557+
(result, _, next) => parseString(result, next),
558+
],
559+
(err, result) => {
560+
assert.strictEqual(err, null);
561+
const content = result.ListBucketResult.Contents[0];
562+
assert.strictEqual(content.Key[0], objectNameMeta);
563+
assert.strictEqual(content['x-amz-meta-color'][0], 'yellow');
564+
done();
565+
});
566+
});
536567
});
537568
});

0 commit comments

Comments
 (0)