From 99b9108cba096642f89107cdc2e89e8139895c9f Mon Sep 17 00:00:00 2001 From: DarkIsDude Date: Wed, 4 Feb 2026 07:18:45 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=8E=A8=20Code=20formatting=20improvem?= =?UTF-8?q?ents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: CLDSRV-823 --- lib/api/bucketGet.js | 75 ++++++++++++----------------------- lib/api/objectGetLegalHold.js | 41 ++++++------------- 2 files changed, 39 insertions(+), 77 deletions(-) diff --git a/lib/api/bucketGet.js b/lib/api/bucketGet.js index 1215686a3d..b504e0f99d 100644 --- a/lib/api/bucketGet.js +++ b/lib/api/bucketGet.js @@ -8,14 +8,9 @@ const escapeForXml = s3middleware.escapeForXml; const { pushMetric } = require('../utapi/utilities'); const versionIdUtils = versioning.VersionID; const monitoring = require('../utilities/monitoringHandler'); -const { generateToken, decryptToken } - = require('../api/apiUtils/object/continueToken'); +const { generateToken, decryptToken } = require('../api/apiUtils/object/continueToken'); -// do not url encode the continuation tokens -const skipUrlEncoding = new Set([ - 'ContinuationToken', - 'NextContinuationToken', -]); +const xmlParamsToSkipUrlEncoding = new Set(['ContinuationToken', 'NextContinuationToken']); /* Sample XML response for GET bucket objects V2: @@ -122,17 +117,16 @@ function processVersions(bucketName, listParams, list) { { tag: 'IsTruncated', value: isTruncated }, ]; - const escapeXmlFn = listParams.encoding === 'url' ? - querystring.escape : escapeForXml; + const escapeXmlFn = listParams.encoding === 'url' ? querystring.escape : escapeForXml; xmlParams.forEach(p => { if (p.value) { const val = p.tag !== 'NextVersionIdMarker' || p.value === 'null' ? - p.value : versionIdUtils.encode(p.value); + p.value : + versionIdUtils.encode(p.value); xml.push(`<${p.tag}>${escapeXmlFn(val)}`); } }); - let lastKey = listParams.keyMarker ? - escapeXmlFn(listParams.keyMarker) : undefined; + let lastKey = listParams.keyMarker ? escapeXmlFn(listParams.keyMarker) : undefined; list.Versions.forEach(item => { const v = item.value; const objectKey = escapeXmlFn(item.key); @@ -143,7 +137,8 @@ function processVersions(bucketName, listParams, list) { `${objectKey}`, '', (v.IsNull || v.VersionId === undefined) ? - 'null' : versionIdUtils.encode(v.VersionId), + 'null' + : versionIdUtils.encode(v.VersionId), '', `${isLatest}`, `${v.LastModified}`, @@ -182,31 +177,19 @@ function processMasterVersions(bucketName, listParams, list) { ]; if (listParams.v2) { - xmlParams.push( - { tag: 'StartAfter', value: listParams.startAfter || '' }); - xmlParams.push( - { tag: 'FetchOwner', value: `${listParams.fetchOwner}` }); - xmlParams.push({ - tag: 'ContinuationToken', - value: generateToken(listParams.continuationToken) || '', - }); - xmlParams.push({ - tag: 'NextContinuationToken', - value: generateToken(list.NextContinuationToken), - }); - xmlParams.push({ - tag: 'KeyCount', - value: list.Contents ? list.Contents.length : 0, - }); + xmlParams.push({ tag: 'StartAfter', value: listParams.startAfter || '' }); + xmlParams.push({ tag: 'FetchOwner', value: `${listParams.fetchOwner}` }); + xmlParams.push({ tag: 'ContinuationToken', value: generateToken(listParams.continuationToken) || '', }); + xmlParams.push({ tag: 'NextContinuationToken', value: generateToken(list.NextContinuationToken), }); + xmlParams.push({ tag: 'KeyCount', value: list.Contents ? list.Contents.length : 0, }); } else { xmlParams.push({ tag: 'Marker', value: listParams.marker || '' }); xmlParams.push({ tag: 'NextMarker', value: list.NextMarker }); } - const escapeXmlFn = listParams.encoding === 'url' ? - querystring.escape : escapeForXml; + const escapeXmlFn = listParams.encoding === 'url' ? querystring.escape : escapeForXml; xmlParams.forEach(p => { - if (p.value && skipUrlEncoding.has(p.tag)) { + if (p.value && xmlParamsToSkipUrlEncoding.has(p.tag)) { xml.push(`<${p.tag}>${p.value}`); } else if (p.value || p.tag === 'KeyCount' || p.tag === 'MaxKeys') { xml.push(`<${p.tag}>${escapeXmlFn(p.value)}`); @@ -246,10 +229,10 @@ function processMasterVersions(bucketName, listParams, list) { ); }); list.CommonPrefixes.forEach(item => { - const val = escapeXmlFn(item); - xml.push(`${val}`); + xml.push(`${escapeXmlFn(item)}`); }); xml.push(''); + return xml.join(''); } @@ -298,17 +281,13 @@ function bucketGet(authInfo, request, log, callback) { 'List Type specified in Request')); } if (v2) { - log.addDefaultFields({ - action: 'ListObjectsV2', - }); + log.addDefaultFields({ action: 'ListObjectsV2', }); if (request.serverAccessLog) { // eslint-disable-next-line no-param-reassign request.serverAccessLog.analyticsAction = 'ListObjectsV2'; } } else if (params.versions !== undefined) { - log.addDefaultFields({ - action: 'ListObjectVersions', - }); + log.addDefaultFields({ action: 'ListObjectVersions', }); if (request.serverAccessLog) { // eslint-disable-next-line no-param-reassign request.serverAccessLog.analyticsAction = 'ListObjectVersions'; @@ -317,16 +296,14 @@ function bucketGet(authInfo, request, log, callback) { log.debug('processing request', { method: 'bucketGet' }); const encoding = params['encoding-type']; if (encoding !== undefined && encoding !== 'url') { - monitoring.promMetrics( - 'GET', bucketName, 400, 'listBucket'); + monitoring.promMetrics('GET', bucketName, 400, 'listBucket'); return callback(errorInstances.InvalidArgument.customizeDescription('Invalid ' + 'Encoding Method specified in Request')); } - const requestMaxKeys = params['max-keys'] ? - Number.parseInt(params['max-keys'], 10) : 1000; + + const requestMaxKeys = params['max-keys'] ? Number.parseInt(params['max-keys'], 10) : 1000; if (Number.isNaN(requestMaxKeys) || requestMaxKeys < 0) { - monitoring.promMetrics( - 'GET', bucketName, 400, 'listBucket'); + monitoring.promMetrics('GET', bucketName, 400, 'listBucket'); return callback(errors.InvalidArgument); } // AWS only returns 1000 keys even if max keys are greater. @@ -353,8 +330,7 @@ function bucketGet(authInfo, request, log, callback) { if (v2) { listParams.v2 = true; listParams.startAfter = params['start-after']; - listParams.continuationToken = - decryptToken(params['continuation-token']); + listParams.continuationToken = decryptToken(params['continuation-token']); listParams.fetchOwner = params['fetch-owner'] === 'true'; } else { listParams.marker = params.marker; @@ -374,7 +350,8 @@ function bucketGet(authInfo, request, log, callback) { delete listParams.marker; listParams.keyMarker = params['key-marker']; listParams.versionIdMarker = params['version-id-marker'] ? - versionIdUtils.decode(params['version-id-marker']) : undefined; + versionIdUtils.decode(params['version-id-marker']) : + undefined; } if (!requestMaxKeys) { diff --git a/lib/api/objectGetLegalHold.js b/lib/api/objectGetLegalHold.js index 2f165748f3..a403fae458 100644 --- a/lib/api/objectGetLegalHold.js +++ b/lib/api/objectGetLegalHold.js @@ -25,16 +25,12 @@ function objectGetLegalHold(authInfo, request, log, callback) { const decodedVidResult = decodeVersionId(query); if (decodedVidResult instanceof Error) { - log.trace('invalid versionId query', { - versionId: query.versionId, - error: decodedVidResult, - }); + log.trace('invalid versionId query', { versionId: query.versionId, error: decodedVidResult }); return process.nextTick(() => callback(decodedVidResult)); } const versionId = decodedVidResult; - // FIXME pass 'getDeleteMarker: true' option to set - // 'x-amz-delete-marker' header (see S3C-7592) + // FIXME pass 'getDeleteMarker: true' option to set 'x-amz-delete-marker' header (see S3C-7592) const metadataValParams = { authInfo, bucketName, @@ -48,34 +44,26 @@ function objectGetLegalHold(authInfo, request, log, callback) { next => standardMetadataValidateBucketAndObj(metadataValParams, request.actionImplicitDenies, log, (err, bucket, objectMD) => { if (err) { - log.trace('request authorization failed', - { method: 'objectGetLegalHold', error: err }); + log.trace('request authorization failed', { method: 'objectGetLegalHold', error: err }); return next(err); } if (!objectMD) { - const err = versionId ? errors.NoSuchVersion : - errors.NoSuchKey; - log.trace('error no object metadata found', - { method: 'objectGetLegalHold', error: err }); + const err = versionId ? errors.NoSuchVersion : errors.NoSuchKey; + log.trace('error no object metadata found', { method: 'objectGetLegalHold', error: err }); return next(err, bucket); } if (objectMD.isDeleteMarker) { if (versionId) { - log.trace('requested version is delete marker', - { method: 'objectGetLegalHold' }); - // FIXME we should return a `x-amz-delete-marker: true` header, - // see S3C-7592 + log.trace('requested version is delete marker', { method: 'objectGetLegalHold' }); + // FIXME we should return a `x-amz-delete-marker: true` header, see S3C-7592 return next(errors.MethodNotAllowed); } - log.trace('most recent version is delete marker', - { method: 'objectGetLegalHold' }); - // FIXME we should return a `x-amz-delete-marker: true` header, - // see S3C-7592 + log.trace('most recent version is delete marker', { method: 'objectGetLegalHold' }); + // FIXME we should return a `x-amz-delete-marker: true` header, see S3C-7592 return next(errors.NoSuchKey); } if (!bucket.isObjectLockEnabled()) { - log.trace('object lock not enabled on bucket', - { method: 'objectGetRetention' }); + log.trace('object lock not enabled on bucket', { method: 'objectGetRetention' }); return next(errorInstances.InvalidRequest.customizeDescription( 'Bucket is missing Object Lock Configuration')); } @@ -90,11 +78,9 @@ function objectGetLegalHold(authInfo, request, log, callback) { return next(null, bucket, xml, objectMD); }, ], (err, bucket, xml, objectMD) => { - const additionalResHeaders = collectCorsHeaders(request.headers.origin, - request.method, bucket); + const additionalResHeaders = collectCorsHeaders(request.headers.origin, request.method, bucket); if (err) { - log.trace('error processing request', { error: err, - method: 'objectGetLegalHold' }); + log.trace('error processing request', { error: err, method: 'objectGetLegalHold' }); } else { pushMetric('getObjectLegalHold', log, { authInfo, @@ -104,8 +90,7 @@ function objectGetLegalHold(authInfo, request, log, callback) { location: objectMD ? objectMD.dataStoreName : undefined, }); const verCfg = bucket.getVersioningConfiguration(); - additionalResHeaders['x-amz-version-id'] = - getVersionIdResHeader(verCfg, objectMD); + additionalResHeaders['x-amz-version-id'] = getVersionIdResHeader(verCfg, objectMD); } return callback(err, xml, additionalResHeaders); }); From 041ccf745a043e3cc6d69a9835cee868f80ba801 Mon Sep 17 00:00:00 2001 From: DarkIsDude Date: Thu, 5 Feb 2026 11:57:05 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=9A=A8=20remove=20trailing=20comma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: CLDSRV-823 --- lib/api/bucketGet.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/api/bucketGet.js b/lib/api/bucketGet.js index b504e0f99d..ed52f4ee9a 100644 --- a/lib/api/bucketGet.js +++ b/lib/api/bucketGet.js @@ -179,9 +179,9 @@ function processMasterVersions(bucketName, listParams, list) { if (listParams.v2) { xmlParams.push({ tag: 'StartAfter', value: listParams.startAfter || '' }); xmlParams.push({ tag: 'FetchOwner', value: `${listParams.fetchOwner}` }); - xmlParams.push({ tag: 'ContinuationToken', value: generateToken(listParams.continuationToken) || '', }); - xmlParams.push({ tag: 'NextContinuationToken', value: generateToken(list.NextContinuationToken), }); - xmlParams.push({ tag: 'KeyCount', value: list.Contents ? list.Contents.length : 0, }); + xmlParams.push({ tag: 'ContinuationToken', value: generateToken(listParams.continuationToken) || '' }); + xmlParams.push({ tag: 'NextContinuationToken', value: generateToken(list.NextContinuationToken) }); + xmlParams.push({ tag: 'KeyCount', value: list.Contents ? list.Contents.length : 0 }); } else { xmlParams.push({ tag: 'Marker', value: listParams.marker || '' }); xmlParams.push({ tag: 'NextMarker', value: list.NextMarker }); @@ -281,13 +281,13 @@ function bucketGet(authInfo, request, log, callback) { 'List Type specified in Request')); } if (v2) { - log.addDefaultFields({ action: 'ListObjectsV2', }); + log.addDefaultFields({ action: 'ListObjectsV2' }); if (request.serverAccessLog) { // eslint-disable-next-line no-param-reassign request.serverAccessLog.analyticsAction = 'ListObjectsV2'; } } else if (params.versions !== undefined) { - log.addDefaultFields({ action: 'ListObjectVersions', }); + log.addDefaultFields({ action: 'ListObjectVersions' }); if (request.serverAccessLog) { // eslint-disable-next-line no-param-reassign request.serverAccessLog.analyticsAction = 'ListObjectVersions';