* bucketGet - Return list of objects in bucket, supports v1 & v2 * @param {AuthInfo} authInfo - Instance of AuthInfo class with * requester's info * @param {object} request - http request object * @param {function} log - Werelogs request logger * @param {functi
(authInfo, request, log, callback)
| 285 | * @throws {Error} |
| 286 | */ |
| 287 | async function bucketGet(authInfo, request, log, callback) { |
| 288 | if (callback) { |
| 289 | return bucketGet(authInfo, request, log) |
| 290 | .then(result => callback(null, ...result)) |
| 291 | .catch(err => callback(err, null, err.additionalResHeaders)); |
| 292 | } |
| 293 | |
| 294 | const params = request.query; |
| 295 | const bucketName = request.bucketName; |
| 296 | const v2 = params['list-type']; |
| 297 | |
| 298 | const optionalAttributes = parseAttributesHeaders( |
| 299 | request.headers, |
| 300 | 'x-amz-optional-object-attributes', |
| 301 | OPTIONAL_ATTRIBUTES, |
| 302 | ); |
| 303 | |
| 304 | if (v2 !== undefined && Number.parseInt(v2, 10) !== 2) { |
| 305 | throw errorInstances.InvalidArgument.customizeDescription('Invalid List Type specified in Request'); |
| 306 | } |
| 307 | |
| 308 | if (v2) { |
| 309 | log.addDefaultFields({ action: 'ListObjectsV2' }); |
| 310 | if (request.serverAccessLog) { |
| 311 | // eslint-disable-next-line no-param-reassign |
| 312 | request.serverAccessLog.analyticsAction = 'ListObjectsV2'; |
| 313 | } |
| 314 | } else if (params.versions !== undefined) { |
| 315 | log.addDefaultFields({ action: 'ListObjectVersions' }); |
| 316 | if (request.serverAccessLog) { |
| 317 | // eslint-disable-next-line no-param-reassign |
| 318 | request.serverAccessLog.analyticsAction = 'ListObjectVersions'; |
| 319 | } |
| 320 | } |
| 321 | log.debug('processing request', { method: 'bucketGet' }); |
| 322 | const encoding = params['encoding-type']; |
| 323 | if (encoding !== undefined && encoding !== 'url') { |
| 324 | monitoring.promMetrics('GET', bucketName, 400, 'listBucket'); |
| 325 | throw errorInstances.InvalidArgument.customizeDescription('Invalid Encoding Method specified in Request'); |
| 326 | } |
| 327 | |
| 328 | const requestMaxKeys = params['max-keys'] ? Number.parseInt(params['max-keys'], 10) : 1000; |
| 329 | if (Number.isNaN(requestMaxKeys) || requestMaxKeys < 0) { |
| 330 | monitoring.promMetrics('GET', bucketName, 400, 'listBucket'); |
| 331 | throw errors.InvalidArgument; |
| 332 | } |
| 333 | const actualMaxKeys = Math.min(constants.listingHardLimit, requestMaxKeys); |
| 334 | |
| 335 | const metadataValParams = { |
| 336 | authInfo, |
| 337 | bucketName, |
| 338 | requestType: request.apiMethods || 'bucketGet', |
| 339 | request, |
| 340 | }; |
| 341 | const listParams = { |
| 342 | listingType: 'DelimiterMaster', |
| 343 | maxKeys: actualMaxKeys, |
| 344 | prefix: params.prefix, |
no test coverage detected