import Database from "better-sqlite3";
import express from "express";
import createError from "http-errors";
import grimm from "./grimm.js";
import { rootFolder } from "./helpers.js";
import authRouter from "./routes/auth.js";
import codexRouter from "./routes/codex.js";
import commentRouter from "./routes/comment.js";
import indexRouter from "./routes/main.js";
import planterRouter from "./routes/planter.js";
import gardenRouter from "./routes/garden.js";
import latbsRouter from "./routes/latbs.js";
import redirectRouter from "./routes/redirects.js";
import sourceRouter from "./routes/source.js";
import statsRouter from "./routes/stats.js";
const router = express.Router();
const db = new Database("./db/site.db");
db.pragma("journal_mode = DELETE");
const auth = permission => {
if (permission) {
return (req, res, next) => {
if (req?.user) {
req.user.prefs = db
.prepare("SELECT * FROM user_preferences WHERE userID = ?")
.get(req.user.userID);
}
if (req?.user?.permissions === permission) {
return next();
}
return next(createError(403));
};
} else {
return (req, res, next) => {
if (req?.user) {
req.user.prefs = db
.prepare("SELECT * FROM user_preferences WHERE userID = ?")
.get(req.user.userID);
}
if (req.isAuthenticated()) {
return next();
}
return next(createError(403));
};
}
};
router.post("/post-comment", commentRouter);
router.use("/x/stats", auth("admin"), statsRouter);
router.use(
"/x/stats",
auth("admin"),
express.static(`${rootFolder}/hypertext/admin/stats`)
);
router.get("/x/sp", auth("admin"), (req, res, next) =>
res.render("../admin/startpage/en")
);
router.use(
"/x/sp",
auth("admin"),
express.static(`${rootFolder}/hypertext/admin/startpage`)
);
router.use("/x/planter", auth("admin"), planterRouter);
router.use(
"/x/planter",
auth("admin"),
express.static(`${rootFolder}/hypertext/admin/planter`)
);
router.get('/x/ip', (req, res) => {
res.send(req.headers["x-real-ip"]);
});
router.use("/", authRouter);
router.use("/garden", gardenRouter);
router.use("/latbs", latbsRouter);
router.use("/codex", codexRouter);
router.use("/source", sourceRouter);
router.use("/", indexRouter);
router.use("/", redirectRouter);
router.use(express.static(`${rootFolder}/hypertext/public`));
router.use((req, res, next) => {
next(createError(req.url.startsWith("/x/") ? 403 : 404));
});
router.use((err, req, res, next) => {
if (err.message != "Not Found") {
console.error(err.stack);
}
res.locals.message = err.message;
res.locals.error = err;
return res
.status(err.status || 500)
.render(`error/${[403, 404].includes(err.status) ? err.status : 500}`, {
lang: "en",
slug: err.status,
baseDomain: "satyrs.eu",
translates: [],
grimm: grimm,
tr: grimm.translator("en")
});
});
export default router;