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

Function validateHeaders

lib/api/apiUtils/object/objectLockHelpers.js:36–72  ·  view source on GitHub ↗

* Validates object lock headers * @param {object} bucket - bucket metadata * @param {object} headers - request headers * @param {object} log - the log request * @return {object} - object with error if validation fails

(bucket, headers, log)

Source from the content-addressed store, hash-verified

34 * @return {object} - object with error if validation fails
35 */
36function validateHeaders(bucket, headers, log) {
37 const bucketObjectLockEnabled = bucket.isObjectLockEnabled();
38 const objectLegalHold = headers['x-amz-object-lock-legal-hold'];
39 const objectLockDate = headers['x-amz-object-lock-retain-until-date'];
40 const objectLockMode = headers['x-amz-object-lock-mode'];
41 // If retention headers or legal hold header present but
42 // object lock is not enabled on the bucket return error
43 if ((objectLockDate || objectLockMode || objectLegalHold)
44 && !bucketObjectLockEnabled) {
45 log.trace('bucket is missing ObjectLockConfiguration');
46 return errorInstances.InvalidRequest.customizeDescription(
47 'Bucket is missing ObjectLockConfiguration');
48 }
49 if ((objectLockMode || objectLockDate) &&
50 !(objectLockMode && objectLockDate)) {
51 return errorInstances.InvalidArgument.customizeDescription(
52 'x-amz-object-lock-retain-until-date and ' +
53 'x-amz-object-lock-mode must both be supplied',
54 );
55 }
56 const validModes = new Set(['GOVERNANCE', 'COMPLIANCE']);
57 if (objectLockMode && !validModes.has(objectLockMode)) {
58 return errorInstances.InvalidArgument.customizeDescription(
59 'Unknown wormMode directive');
60 }
61 const validLegalHolds = new Set(['ON', 'OFF']);
62 if (objectLegalHold && !validLegalHolds.has(objectLegalHold)) {
63 return errorInstances.InvalidArgument.customizeDescription(
64 'Legal hold status must be one of "ON", "OFF"');
65 }
66 const currentDate = new Date().toISOString();
67 if (objectLockMode && objectLockDate <= currentDate) {
68 return errorInstances.InvalidArgument.customizeDescription(
69 'The retain until date must be in the future!');
70 }
71 return null;
72}
73
74/**
75 * Compares new object retention to bucket default retention

Callers 8

objectPutFunction · 0.85
_storetheMPObjectFunction · 0.85
objectHeadFunction · 0.85
objectGetFunction · 0.85
objectCopyFunction · 0.85
objectPutCopyPartFunction · 0.85
runWebsiteFunction · 0.85

Calls 1

traceMethod · 0.80

Tested by

no test coverage detected