diff --git a/deno.json b/deno.json index 60e9c90..1e3856b 100644 --- a/deno.json +++ b/deno.json @@ -33,6 +33,7 @@ "fresh/": "https://deno.land/x/fresh@1.7.3/", "$fresh/": "https://deno.land/x/fresh@1.7.3/", + "@libs/xml": "https://deno.land/x/xml@2.1.3/mod.ts", "postgres": "jsr:@db/postgres@0.19.5", "@b-fuze/deno-dom": "jsr:@b-fuze/deno-dom@0.1.56", @@ -40,7 +41,6 @@ "@hexagon/croner": "jsr:@hexagon/croner@9.1.0", "@mikaelporttila/rss": "jsr:@mikaelporttila/rss@1.1.3", "@libs/qrcode": "jsr:@libs/qrcode@3.0.0", - "@libs/xml": "jsr:@libs/xml@7.0.2", "@simplewebauthn/server": "jsr:@simplewebauthn/server@13.2.1", "@simplewebauthn/browser": "jsr:@simplewebauthn/browser@13.2.0", "@std/assert": "jsr:@std/assert@1.0.14", diff --git a/lib/utils/webdav.ts b/lib/utils/webdav.ts index 44fa658..a196b0c 100644 --- a/lib/utils/webdav.ts +++ b/lib/utils/webdav.ts @@ -12,7 +12,7 @@ export function addDavPrefixToKeys(object: Record, prefix = 'D:'): if (typeof object === 'object' && object !== null) { return Object.entries(object).reduce((reducedObject, [key, value]) => { - const prefixedKey = key.startsWith('#') || key.startsWith('@') ? key : `${prefix}${key}`; + const prefixedKey = key === 'xml' || key.startsWith('#') || key.startsWith('@') ? key : `${prefix}${key}`; reducedObject[prefixedKey] = addDavPrefixToKeys(value); return reducedObject; }, {} as Record); @@ -105,8 +105,10 @@ export async function buildPropFindResponse( const filePaths = await getFilePaths(join(rootPath, queryPath), depth); const response: Record = { - '@version': '1.0', - '@encoding': 'UTF-8', + xml: { + '@version': '1.0', + '@encoding': 'UTF-8', + }, multistatus: { '@xmlns:D': 'DAV:', response: [], diff --git a/lib/utils/webdav_test.ts b/lib/utils/webdav_test.ts index 1079f3c..d3311e0 100644 --- a/lib/utils/webdav_test.ts +++ b/lib/utils/webdav_test.ts @@ -135,8 +135,10 @@ Deno.test('that @libs/xml.parse works', () => { `, expected: { - '@version': '1.0', - '@encoding': 'UTF-8', + xml: { + '@version': 1, + '@encoding': 'UTF-8', + }, propfind: { '@xmlns': 'DAV:', prop: { @@ -153,8 +155,10 @@ Deno.test('that @libs/xml.parse works', () => { `, expected: { - '@version': '1.0', - '@encoding': 'UTF-8', + xml: { + '@version': 1, + '@encoding': 'UTF-8', + }, 'D:propfind': { '@xmlns:D': 'DAV:', 'D:prop': { @@ -175,8 +179,10 @@ Deno.test('that @libs/xml.stringify works', () => { const tests: { input: Record; expected: string }[] = [ { input: { - '@version': '1.0', - '@encoding': 'UTF-8', + xml: { + '@version': '1.0', + '@encoding': 'UTF-8', + }, 'D:propfind': { 'D:prop': { 'D:displayname': 'test', @@ -192,8 +198,10 @@ Deno.test('that @libs/xml.stringify works', () => { }, { input: { - '@version': '1.0', - '@encoding': 'UTF-8', + xml: { + '@version': '1.0', + '@encoding': 'UTF-8', + }, 'D:propfind': { '@xmlns:D': 'DAV:', 'D:prop': { diff --git a/routes/dav.tsx b/routes/dav.tsx index 8d28027..5192e89 100644 --- a/routes/dav.tsx +++ b/routes/dav.tsx @@ -168,8 +168,10 @@ export const handler: Handler = async (request, context await lock.acquire(); const responseXml: Record = { - '@version': '1.0', - '@encoding': 'UTF-8', + xml: { + '@version': '1.0', + '@encoding': 'UTF-8', + }, prop: { '@xmlns:D': 'DAV:', lockdiscovery: {