43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import {
|
|
handleClientAssetRequest,
|
|
isClientAssetPath
|
|
} from "./client-assets.js";
|
|
import { htmlPage } from "./page-template.js";
|
|
import {
|
|
handleNextcloudBlobRequest,
|
|
handleNextcloudListRequest
|
|
} from "./nextcloud-proxy.js";
|
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
|
|
export function createRequestHandler() {
|
|
return async function handleRequest(req: IncomingMessage, res: ServerResponse) {
|
|
const url = new URL(req.url ?? "/", "http://localhost");
|
|
|
|
if (url.pathname === "/health") {
|
|
res.statusCode = 200;
|
|
res.setHeader("content-type", "application/json; charset=utf-8");
|
|
res.end(JSON.stringify({ status: "ok" }));
|
|
return;
|
|
}
|
|
|
|
if (isClientAssetPath(url.pathname)) {
|
|
await handleClientAssetRequest(url, res);
|
|
return;
|
|
}
|
|
|
|
if (url.pathname === "/api/nextcloud/list") {
|
|
await handleNextcloudListRequest(url, res);
|
|
return;
|
|
}
|
|
|
|
if (url.pathname === "/api/nextcloud/blob") {
|
|
await handleNextcloudBlobRequest(url, res);
|
|
return;
|
|
}
|
|
|
|
res.statusCode = 200;
|
|
res.setHeader("content-type", "text/html; charset=utf-8");
|
|
res.end(htmlPage());
|
|
};
|
|
}
|