From 316c90b62ce39a30c70492f89cc58d0047da2e1d Mon Sep 17 00:00:00 2001 From: abersheeran Date: Tue, 28 Nov 2023 23:58:06 +0800 Subject: [PATCH] Add PROPPATCH method implementation --- src/index.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 372e625..ce8a967 100644 --- a/src/index.ts +++ b/src/index.ts @@ -461,7 +461,24 @@ export default { } } case 'PROPPATCH': { - + let request_xml = await xml2js.parseStringPromise(await request.text()); + let setCustomMetadata = request_xml["D:propertyupdate"]["D:set"]["D:prop"]; + let removeCustomMetadataKeys = Object.keys(request_xml["D:propertyupdate"]["D:remove"]["D:prop"]); + let object = await bucket.get(resource_path); + if (object === null) { + response = new Response('Not Found', { status: 404 }); + } else { + await bucket.put(resource_path, object.body, { + httpMetadata: object.httpMetadata, + customMetadata: { + ...Object.fromEntries(Object.entries(object.customMetadata ?? {}).filter( + ([name, _]) => !removeCustomMetadataKeys.includes(name) + )), + ...setCustomMetadata, + }, + }); + response = new Response('', { status: 200 }); + } } default: { response = new Response('Method Not Allowed', {