finally a real working compat for webdav

This commit is contained in:
fyears 2024-01-01 01:15:51 +08:00
parent 2d7c33fb1a
commit 9519793860

View File

@ -30,6 +30,7 @@ if (VALID_REQURL) {
delete transformedHeaders["Host"];
delete transformedHeaders["content-length"];
delete transformedHeaders["Content-Length"];
const r = await requestUrl({
url: options.url,
method: options.method,
@ -47,48 +48,60 @@ if (VALID_REQURL) {
if (contentType !== undefined) {
contentType = contentType.toLowerCase();
}
// console.log(`contentType=${contentType}`)
// console.log(`requesting url=${options.url}`);
// console.log(`contentType=${contentType}`);
let r2: Response = undefined;
if (contentType.includes("xml")) {
r2 = new Response(r.text, {
// let r2: Response = undefined;
// if (contentType.includes("xml")) {
// r2 = new Response(r.text, {
// status: r.status,
// statusText: getReasonPhrase(r.status),
// headers: r.headers,
// });
// } else if (
// contentType.includes("json") ||
// contentType.includes("javascript")
// ) {
// console.log('inside json branch');
// // const j = r.json;
// // console.log(j);
// r2 = new Response(
// r.text, // yea, here is the text because Response constructor expects a text
// {
// status: r.status,
// statusText: getReasonPhrase(r.status),
// headers: r.headers,
// });
// } else if (contentType.includes("text")) {
// // avoid text/json,
// // so we split this out from the above xml or json branch
// r2 = new Response(r.text, {
// status: r.status,
// statusText: getReasonPhrase(r.status),
// headers: r.headers,
// });
// } else if (
// contentType.includes("octet-stream") ||
// contentType.includes("binary") ||
// contentType.includes("buffer")
// ) {
// // application/octet-stream
// r2 = new Response(r.arrayBuffer, {
// status: r.status,
// statusText: getReasonPhrase(r.status),
// headers: r.headers,
// });
// } else {
// throw Error(
// `do not know how to deal with requested content type = ${contentType}`
// );
// }
const r2 = new Response(r.arrayBuffer, {
status: r.status,
statusText: getReasonPhrase(r.status),
headers: r.headers,
});
} else if (
contentType.includes("json") ||
contentType.includes("javascript")
) {
r2 = new Response(r.json, {
status: r.status,
statusText: getReasonPhrase(r.status),
headers: r.headers,
});
} else if (contentType.includes("text")) {
// avoid text/json,
// so we split this out from the above xml or json branch
r2 = new Response(r.text, {
status: r.status,
statusText: getReasonPhrase(r.status),
headers: r.headers,
});
} else if (
contentType.includes("octet-stream") ||
contentType.includes("binary") ||
contentType.includes("buffer")
) {
// application/octet-stream
r2 = new Response(r.arrayBuffer, {
status: r.status,
statusText: getReasonPhrase(r.status),
headers: r.headers,
});
} else {
throw Error(
`do not know how to deal with requested content type = ${contentType}`
);
}
return r2;
}
);
@ -444,9 +457,9 @@ const downloadFromRemoteRaw = async (
fileOrFolderPath: string
) => {
await client.init();
const buff = (await client.client.getFileContents(
getWebdavPath(fileOrFolderPath, client.remoteBaseDir)
)) as BufferLike;
const p = getWebdavPath(fileOrFolderPath, client.remoteBaseDir);
// console.log(`getWebdavPath=${p}`);
const buff = (await client.client.getFileContents(p)) as BufferLike;
if (buff instanceof ArrayBuffer) {
return buff;
} else if (buff instanceof Buffer) {
@ -485,6 +498,7 @@ export const downloadFromRemote = async (
downloadFile = remoteEncryptedKey;
}
downloadFile = getWebdavPath(downloadFile, client.remoteBaseDir);
// console.log(`downloadFile=${downloadFile}`);
const remoteContent = await downloadFromRemoteRaw(client, downloadFile);
let localContent = remoteContent;
if (password !== "") {