* Returns legal hold status of object * @param {AuthInfo} authInfo - Instance of AuthInfo class with requester's info * @param {object} request - http request object * @param {object} log - Werelogs logger * @return {Promise } - object containing xml and additionalResHeaders
(authInfo, request, log, callback)
| 18 | * @return {Promise<object>} - object containing xml and additionalResHeaders |
| 19 | */ |
| 20 | async function objectGetLegalHold(authInfo, request, log, callback) { |
| 21 | if (callback) { |
| 22 | return objectGetLegalHold(authInfo, request, log) |
| 23 | .then(result => callback(null, ...result)) |
| 24 | .catch(err => callback(err, null, err.additionalResHeaders)); |
| 25 | } |
| 26 | |
| 27 | log.debug('processing request', { method: 'objectGetLegalHold' }); |
| 28 | |
| 29 | const { bucketName, objectKey, query } = request; |
| 30 | |
| 31 | const decodedVidResult = decodeVersionId(query); |
| 32 | if (decodedVidResult instanceof Error) { |
| 33 | log.trace('invalid versionId query', { versionId: query.versionId, error: decodedVidResult }); |
| 34 | throw decodedVidResult; |
| 35 | } |
| 36 | const versionId = decodedVidResult; |
| 37 | |
| 38 | // FIXME pass 'getDeleteMarker: true' option to set 'x-amz-delete-marker' header (see S3C-7592) |
| 39 | const metadataValParams = { |
| 40 | authInfo, |
| 41 | bucketName, |
| 42 | objectKey, |
| 43 | versionId, |
| 44 | requestType: request.apiMethods || 'objectGetLegalHold', |
| 45 | request, |
| 46 | }; |
| 47 | |
| 48 | let bucket, objectMD; |
| 49 | |
| 50 | try { |
| 51 | const standardMetadataValidateBucketAndObjPromised = promisify(standardMetadataValidateBucketAndObj); |
| 52 | ({ bucket, objectMD } = await standardMetadataValidateBucketAndObjPromised( |
| 53 | metadataValParams, |
| 54 | request.actionImplicitDenies, |
| 55 | log, |
| 56 | )); |
| 57 | } catch (err) { |
| 58 | log.trace('request authorization failed', { method: 'objectGetLegalHold', error: err }); |
| 59 | throw err; |
| 60 | } |
| 61 | |
| 62 | if (!objectMD) { |
| 63 | const err = versionId ? errors.NoSuchVersion : errors.NoSuchKey; |
| 64 | log.trace('error no object metadata found', { method: 'objectGetLegalHold', error: err }); |
| 65 | throw err; |
| 66 | } |
| 67 | |
| 68 | if (objectMD.isDeleteMarker) { |
| 69 | if (versionId) { |
| 70 | log.trace('requested version is delete marker', { method: 'objectGetLegalHold' }); |
| 71 | // FIXME we should return a `x-amz-delete-marker: true` header, see S3C-7592 |
| 72 | throw errors.MethodNotAllowed; |
| 73 | } |
| 74 | |
| 75 | log.trace('most recent version is delete marker', { method: 'objectGetLegalHold' }); |
| 76 | // FIXME we should return a `x-amz-delete-marker: true` header, see S3C-7592 |
| 77 | throw errors.NoSuchKey; |
no test coverage detected