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

Function objectHead

lib/api/objectHead.js:30–178  ·  view source on GitHub ↗

* HEAD Object - Same as Get Object but only respond with headers *(no actual body) * @param {AuthInfo} authInfo - Instance of AuthInfo class with requester's info * @param {object} request - normalized request object * @param {object} log - Werelogs logger * @param {function} callback - callbac

(authInfo, request, log, callback)

Source from the content-addressed store, hash-verified

28 *
29 */
30function objectHead(authInfo, request, log, callback) {
31 log.debug('processing request', { method: 'objectHead' });
32 const bucketName = request.bucketName;
33 const objectKey = request.objectKey;
34
35 const decodedVidResult = decodeVersionId(request.query);
36 if (decodedVidResult instanceof Error) {
37 log.trace('invalid versionId query', {
38 versionId: request.query.versionId,
39 error: decodedVidResult,
40 });
41 return callback(decodedVidResult);
42 }
43 const versionId = decodedVidResult;
44
45 const mdValParams = {
46 authInfo,
47 bucketName,
48 objectKey,
49 versionId,
50 getDeleteMarker: true,
51 requestType: request.apiMethods || 'objectHead',
52 request,
53 };
54
55 return standardMetadataValidateBucketAndObj(mdValParams, request.actionImplicitDenies, log,
56 (err, bucket, objMD) => updateEncryption(err, bucket, objMD, objectKey, log, {},
57 (err, bucket, objMD) => {
58 const corsHeaders = collectCorsHeaders(request.headers.origin,
59 request.method, bucket);
60 if (err) {
61 log.debug('error validating request', {
62 error: err,
63 method: 'objectHead',
64 });
65 monitoring.promMetrics(
66 'HEAD', bucketName, err.code, 'headObject');
67 return callback(err, corsHeaders);
68 }
69 if (!objMD) {
70 const err = versionId ? errors.NoSuchVersion : errors.NoSuchKey;
71 monitoring.promMetrics(
72 'HEAD', bucketName, err.code, 'headObject');
73 return callback(err, corsHeaders);
74 }
75 const verCfg = bucket.getVersioningConfiguration();
76 if (objMD.isDeleteMarker) {
77 const responseHeaders = Object.assign({},
78 { 'x-amz-delete-marker': true }, corsHeaders);
79 if (!versionId) {
80 monitoring.promMetrics(
81 'HEAD', bucketName, 404, 'headObject');
82 return callback(errors.NoSuchKey, responseHeaders);
83 }
84 // return MethodNotAllowed if requesting a specific
85 // version that has a delete marker
86 responseHeaders['x-amz-version-id'] =
87 getVersionIdResHeader(verCfg, objMD);

Callers 3

objectHead.jsFile · 0.85
transientBucket.jsFile · 0.85

Calls 15

updateEncryptionFunction · 0.85
collectCorsHeadersFunction · 0.85
getVersionIdResHeaderFunction · 0.85
validateHeadersFunction · 0.85
collectResponseHeadersFunction · 0.85
setExpirationHeadersFunction · 0.85
setArchiveInfoHeadersFunction · 0.85
getPartNumberFunction · 0.85
getPartSizeFunction · 0.85
getPartCountFromMd5Function · 0.85
pushMetricFunction · 0.85

Tested by

no test coverage detected