Files
Zumri-Backend/app/routes/docs.routes.js
T
Sathira Sri Sathara 267e80e2ec feat: stabilize API startup and lifecycle management
- Refactor server initialization to separate concerns and improve error handling.
- Implement centralized environment validation using Zod.
- Introduce database, Redis, and queue lifecycle management.
- Add health check endpoints for liveness and readiness.
- Enhance error handling middleware for better response structure.
- Implement rate limiting for API endpoints.
- Add request ID middleware for traceability.
- Create Sequelize CLI configuration and baseline migration for schema management.
- Establish CI workflow with Gitea for testing and syntax checks.
- Document foundational changes and migration strategy in PHASE_0_FOUNDATION_STABILIZATION.md.
- Add Docker Compose configuration for local development and testing.
- Implement unit and integration tests for critical functionality.
2026-09-03 13:33:26 +05:30

79 lines
1.8 KiB
JavaScript

/**
* 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;