import fs from 'fs' import { mdRenderer, njkRenderer } from './siteRenderer.js' // Handle all request and try to find a corresponding file/template. export function requestHandler(req, res, Config) { // Add some sanitization: const path = req.path // Remove all '..' -- should prevent path traversal. .replace(/\.\.+/g, "") // Remove trailing slashes ('/'). .replace(/\/+$/g, "") // Check for njk files first if (fs.existsSync(`./${Config.contentDir}/pages/${path}.njk`)) return res.send(njkRenderer(`./${Config.contentDir}/pages/${path}.njk`)) if (fs.existsSync(`./${Config.contentDir}/pages/${path}/index.njk`)) return res.send(njkRenderer(`./${Config.contentDir}/pages/${path}/index.njk`)) // Secondly search for markdown if (fs.existsSync(`./${Config.contentDir}/pages/${path}.md`)) return res.send(mdRenderer(`./${Config.contentDir}/pages/${path}.md`)) if (fs.existsSync(`./${Config.contentDir}/pages/${path}/index.md`)) return res.send(mdRenderer(`./${Config.contentDir}/pages/${path}/index.md`)) // If no matching file is found, return a 404 error. return res.status(404).send(njkRenderer(`./${Config.contentDir}/errors/404.njk`)) }