NeahNew/node_modules/webdav/test/server/index.ts
2025-05-03 14:17:46 +02:00

61 lines
2.1 KiB
TypeScript

import path from "path";
import { fileURLToPath } from "url";
import { v2 as ws } from "webdav-server";
import { PASSWORD, PORT, USERNAME } from "./credentials.js";
const dirname = path.dirname(fileURLToPath(import.meta.url));
export function createServer(dir: string, authType: "basic" | "digest") {
if (!dir) {
throw new Error("Expected target directory");
}
const userManager = new ws.SimpleUserManager();
const user = userManager.addUser(USERNAME, PASSWORD);
let auth;
switch (authType) {
case "digest":
auth = new ws.HTTPDigestAuthentication(userManager, "test");
break;
case "basic":
/* falls-through */
default:
auth = new ws.HTTPBasicAuthentication(userManager);
break;
}
const privilegeManager = new ws.SimplePathPrivilegeManager();
privilegeManager.setRights(user, "/", ["all"]);
const server = new ws.WebDAVServer({
port: PORT,
httpAuthentication: auth,
privilegeManager: privilegeManager,
maxRequestDepth: Infinity,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods":
"HEAD, GET, PUT, PROPFIND, DELETE, OPTIONS, MKCOL, MOVE, COPY",
"Access-Control-Allow-Headers":
"Accept, Authorization, Content-Type, Content-Length, Depth"
}
});
// console.log(`Created server on localhost with port: 9988, and authType: ${authType}`);
return {
start: function start() {
return new Promise(function (resolve) {
server.setFileSystem("/webdav/server", new ws.PhysicalFileSystem(dir), function () {
server.start(resolve);
});
});
},
stop: function stop() {
return new Promise<void>(function (resolve) {
server.stop(resolve);
});
}
};
}
export function createWebDAVServer(authType: "basic" | "digest" = "basic") {
return createServer(path.resolve(dirname, "../testContents"), authType);
}