61 lines
2.3 KiB
JavaScript
61 lines
2.3 KiB
JavaScript
const http = require("node:http");
|
|
const { host, port, defaultUser } = require("./config.cjs");
|
|
const { dbPath, ensureDb } = require("./db.cjs");
|
|
const { handleAppApi } = require("./app-api.cjs");
|
|
const { handleAdminApi } = require("./admin-api.cjs");
|
|
const { handleAdminStatic } = require("./static-admin.cjs");
|
|
const { sendJson } = require("./http-utils.cjs");
|
|
const { nowIso } = require("./security.cjs");
|
|
const { readBody } = require("./http-utils.cjs");
|
|
|
|
function createLocalAuthServer() {
|
|
ensureDb();
|
|
|
|
return http.createServer(async (req, res) => {
|
|
const requestUrl = new URL(req.url, `http://${req.headers.host || `${host}:${port}`}`);
|
|
const pathname = requestUrl.pathname.replace(/\/+$/, "") || "/";
|
|
|
|
try {
|
|
if (req.method === "OPTIONS") {
|
|
sendJson(res, 200, { success: true });
|
|
return;
|
|
}
|
|
|
|
if (req.method === "GET" && (pathname === "/" || pathname === "/health" || pathname === "/api/health")) {
|
|
sendJson(res, 200, { success: true, service: "local-auth", admin: "/admin/", time: nowIso() });
|
|
return;
|
|
}
|
|
|
|
if (handleAdminStatic(req, res, requestUrl.pathname)) return;
|
|
|
|
const body = ["POST", "PUT", "PATCH"].includes(req.method) ? await readBody(req) : {};
|
|
if (await handleAdminApi(req, res, pathname, body, requestUrl)) return;
|
|
if (await handleAppApi(req, res, pathname, body, requestUrl)) return;
|
|
|
|
sendJson(res, 404, { success: false, message: `Local auth endpoint not found: ${req.method} ${pathname}` });
|
|
} catch (error) {
|
|
sendJson(res, 500, { success: false, message: error.message || "Local auth server error" });
|
|
}
|
|
});
|
|
}
|
|
|
|
function start() {
|
|
const server = createLocalAuthServer();
|
|
server.listen(port, host, () => {
|
|
console.log(`[local-auth] running at http://${host}:${port}`);
|
|
console.log(`[local-auth] admin panel: http://${host}:${port}/admin/`);
|
|
console.log(`[local-auth] default account: ${defaultUser.email} / ${defaultUser.password}`);
|
|
console.log(`[local-auth] data file: ${dbPath}`);
|
|
});
|
|
return server;
|
|
}
|
|
|
|
if (require.main === module || module.parent?.filename?.endsWith("local-auth-server.cjs")) {
|
|
start();
|
|
}
|
|
|
|
module.exports = {
|
|
createLocalAuthServer,
|
|
start,
|
|
};
|