MCPcopy
hub / github.com/scality/cloudserver / bucketGet

Function bucketGet

lib/api/bucketGet.js:287–406  ·  view source on GitHub ↗

* 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)

Source from the content-addressed store, hash-verified

285 * @throws {Error}
286 */
287async 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,

Callers 4

transientBucket.jsFile · 0.85
bucketGet.jsFile · 0.85

Calls 7

parseAttributesHeadersFunction · 0.85
decryptTokenFunction · 0.85
promisifyFunction · 0.85
collectCorsHeadersFunction · 0.85
addDefaultFieldsMethod · 0.80
debugMethod · 0.80
handleResultFunction · 0.70

Tested by

no test coverage detected