From 0e6f45e368437b3a8a94c9fbb7731de555a4310e Mon Sep 17 00:00:00 2001 From: abersheeran Date: Mon, 11 Dec 2023 17:30:15 +0800 Subject: [PATCH] Fix PROPFIND / --- src/index.ts | 116 ++++++++++++++++++++++++++------------------------- 1 file changed, 60 insertions(+), 56 deletions(-) diff --git a/src/index.ts b/src/index.ts index 445bd49..c5b3b57 100644 --- a/src/index.ts +++ b/src/index.ts @@ -319,41 +319,43 @@ export default { } break; case '1': { - let object = await bucket.head(resource_path); - if (object === null && resource_path.endsWith('/')) { - object = await bucket.head(resource_path.slice(0, -1)); - } + if (resource_path !== "") { + let object = await bucket.head(resource_path); + if (object === null && resource_path.endsWith('/')) { + object = await bucket.head(resource_path.slice(0, -1)); + } - if (object === null) { - response = new Response('Not Found', { status: 404 }); - break; - } + if (object === null) { + response = new Response('Not Found', { status: 404 }); + break; + } - if (object.customMetadata?.resourcetype !== '') { - let page = ` - - - /${resource_path} - - - ${Object.entries(fromR2Object(object)) - .filter(([_, value]) => value !== undefined) - .map(([key, value]) => `<${key}>${value}`) - .join('\n ') - } - - HTTP/1.1 200 OK - - - -`; - response = new Response(page, { - status: 207, - headers: { - 'Content-Type': 'text/xml', - }, - }); - break; + if (object.customMetadata?.resourcetype !== '') { + let page = ` + + + /${resource_path} + + + ${Object.entries(fromR2Object(object)) + .filter(([_, value]) => value !== undefined) + .map(([key, value]) => `<${key}>${value}`) + .join('\n ') + } + + HTTP/1.1 200 OK + + + + `; + response = new Response(page, { + status: 207, + headers: { + 'Content-Type': 'text/xml', + }, + }); + break; + } } let page = ` @@ -362,7 +364,7 @@ export default { let cursor: string | undefined = undefined; do { var r2_objects = await bucket.list({ - prefix: resource_path.endsWith('/') ? resource_path : resource_path + '/', + prefix: resource_path.endsWith('/') || resource_path === "" ? resource_path : resource_path + '/', delimiter: '/', cursor: cursor, include: ['httpMetadata', 'customMetadata'], @@ -400,41 +402,43 @@ export default { } break; case 'infinity': { - let object = await bucket.head(resource_path); - if (object === null && resource_path.endsWith('/')) { - object = await bucket.head(resource_path.slice(0, -1)); - } + if (resource_path !== "") { + let object = await bucket.head(resource_path); + if (object === null && resource_path.endsWith('/')) { + object = await bucket.head(resource_path.slice(0, -1)); + } - if (object === null) { - response = new Response('Not Found', { status: 404 }); - break; - } + if (object === null) { + response = new Response('Not Found', { status: 404 }); + break; + } - if (object.customMetadata?.resourcetype !== '') { - let page = ` + if (object.customMetadata?.resourcetype !== '') { + let page = ` /${resource_path} ${Object.entries(fromR2Object(object)) - .filter(([_, value]) => value !== undefined) - .map(([key, value]) => `<${key}>${value}`) - .join('\n ') - } + .filter(([_, value]) => value !== undefined) + .map(([key, value]) => `<${key}>${value}`) + .join('\n ') + } HTTP/1.1 200 OK `; - response = new Response(page, { - status: 207, - headers: { - 'Content-Type': 'text/xml', - }, - }); - break; + response = new Response(page, { + status: 207, + headers: { + 'Content-Type': 'text/xml', + }, + }); + break; + } } let page = ` @@ -443,7 +447,7 @@ export default { let cursor: string | undefined = undefined; do { var r2_objects = await bucket.list({ - prefix: resource_path.endsWith('/') ? resource_path : resource_path + '/', + prefix: resource_path.endsWith('/') || resource_path === "" ? resource_path : resource_path + '/', cursor: cursor, include: ['httpMetadata', 'customMetadata'], });