Add PROPPATCH method implementation

This commit is contained in:
abersheeran 2023-11-28 23:58:06 +08:00
parent 6a3ccf86af
commit 316c90b62c

View File

@ -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', {