/** * Markdown Docs Route */ const express = require("express"); const fs = require("fs"); const path = require("path"); const docsSession = require("../middleware/docsSession.middleware"); const { sensitiveLimiter } = require("../middleware/rateLimit.middleware"); const router = express.Router(); const DOCS_DIR = path.join(__dirname, "../../Documentation"); router.get("/markdown-files", docsSession, (req, res) => { fs.readdir(DOCS_DIR, (err, files) => { if (err) { return res.status(500).json({ success: false, message: "Failed to read documentation folder", error: err.message, }); } const mdFiles = files.filter((file) => file.endsWith(".md")); res.json({ success: true, data: mdFiles, }); }); }); router.get("/view/:file", docsSession, (req, res) => { const filePath = path.join(DOCS_DIR, req.params.file); if (!req.params.file.endsWith(".md")) { return res.status(400).send("Only markdown files allowed"); } // basic protection against path traversal if (!filePath.startsWith(DOCS_DIR)) { return res.status(400).send("Invalid path"); } res.sendFile(filePath); }); // Docs login (simple) router.post("/login", sensitiveLimiter, (req, res) => { const { username, password } = req.body; if ( username === process.env.DOCS_USER && password === process.env.DOCS_PASS ) { res.cookie("docsAuth", "true", { httpOnly: true, sameSite: "lax", secure: process.env.NODE_ENV === "production", }); return res.json({ success: true }); } return res.status(401).json({ success: false, message: "Invalid credentials", }); }); router.post("/logout", (req, res) => { res.clearCookie("docsAuth"); res.json({ success: true }); }); module.exports = router;