import Koa from "koa"; import koaHelmet from "koa-helmet"; import { mkdir, readdir, unlink } from "fs"; import { join } from "path"; import { promisify } from "util"; import routers from "src/routers"; import DB from "src/system/DB"; import Logger from "src/system/Logger"; import { AVATAR_ENTRY_PATH, ESSAY_ENTRY_PATH } from "src/TaehuiComponent"; const pm = promisify(mkdir); const pr = promisify(readdir); const pu = promisify(unlink); const koa = new Koa(); koa.use(koaHelmet()); koa.use(async (ctx, next) => { const { request, request: { method, url, headers }, } = ctx; if (headers["x-real-ip"]) { request.ip = headers["x-real-ip"] as string; } const { ip } = request; try { await next(); } catch (e) { Logger.error(e); ctx.status = 500; } finally { const { status } = ctx; Logger.info(`[${ip}] ${method} ${url} ${status}`); } }); koa.use(routers.routes()); (async () => { await DB.setBaseDB(); await pm(ESSAY_ENTRY_PATH, { recursive: true }); await pm(AVATAR_ENTRY_PATH, { recursive: true }); const fileNames = await pr(ESSAY_ENTRY_PATH); for (const fileName of fileNames) { if (!(await DB.isValidFile(fileName))) { await pu(join(ESSAY_ENTRY_PATH, fileName)); Logger.info(`Wiped ${fileName}`); } } const taehui = koa.listen(10100, () => { process.send?.("ready"); Logger.info("Loaded Taehui"); }); process.on("SIGINT", () => { taehui.close((err) => { process.exit(err ? 1 : 0); }); }); })();