diff --git a/package.json b/package.json index 979d8da..77f5d40 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "push:all": "scripts/push-all.sh", "combine:css": "node scripts/combine-css.js", "test": "mocha --reporter spec \"test/**/*.unit.test.js\" \"test/**/*.property.test.js\"", - "start": "nodemon ./src/app.js --trace-exit -- --config config.toml", + "start": "nodemon ./src/app.js --trace-exit", "prod": "node ./src/app.js --trace-exit", "debug": "nodemon --inspect-brk ./src/app.js --trace-exit", "maildev": "maildev", diff --git a/src/app.js b/src/app.js index b64cdd7..7a3002f 100644 --- a/src/app.js +++ b/src/app.js @@ -1,7 +1,7 @@ // src/app.js require("dotenv").config(); -const { network: c } = require("./config/loader"); +const { network: c, meta } = require("./config/loader"); const net = require("net"); const setupMiddleware = require("./middleware"); @@ -36,7 +36,7 @@ winstonLogger.info( `Server listening on ${c.schema}://${c.domain}:${c.port}`, ); - winstonLogger.info(`NODE_ENV: ${c.node_env}`); + winstonLogger.info(`NODE_ENV: ${meta.node_env}`); }); }); diff --git a/src/config/loader.js b/src/config/loader.js index eccdeaa..b4ebe5a 100644 --- a/src/config/loader.js +++ b/src/config/loader.js @@ -57,20 +57,27 @@ function loadConfig() { // Use a simple flag parser (e.g., --config) const configIdx = process.argv.indexOf("--config"); - const configPath = configIdx !== -1 ? process.argv[configIdx + 1] : null; + let configPath = configIdx !== -1 ? process.argv[configIdx + 1] : null; if (!configPath) { console.info("Notice: No config file provided. Use --config "); console.info(" Using defaults"); - return hydrate(); + configPath = "../../config.toml"; + let toml_config = {}; + try { + const raw = fs.readFileSync(path.resolve(configPath), "utf8"); + const toml_config = parse(raw); + } finally { + return hydrate(toml_config); + } } try { const raw = fs.readFileSync(path.resolve(configPath), "utf8"); - const toml_config = toml.parse(raw); + const toml_config = parse(raw); return hydrate(toml_config); } catch (err) { - console.error(`Failed to load config at ${configPath}:`, err.message); + console.error(`Failed to load config at ${configPath}:`, err.stack); process.exit(1); } } diff --git a/src/controllers/adminTokenController.js b/src/controllers/adminTokenController.js index c47a72d..7492372 100644 --- a/src/controllers/adminTokenController.js +++ b/src/controllers/adminTokenController.js @@ -17,7 +17,8 @@ if (!validateToken(token)) { const error = new SecurityEvent("INVALID_TOKEN", { token }); - return next(error); + // DO NOT send error or it will result in improper redirects + return next(); } const scheme = req.protocol; diff --git a/src/middleware/authCheck.js b/src/middleware/authCheck.js index 07b3987..61f3735 100644 --- a/src/middleware/authCheck.js +++ b/src/middleware/authCheck.js @@ -73,12 +73,12 @@ isAuthenticated: req.isAuthenticated, timestamp: Date.now(), }); - } catch { + } catch (e) { req.isAuthenticated = false; if (req.log) { - req.log.warn(LOG_MESSAGES.AUTH_SERVER_UNAVAILABLE); + req.log.warn(LOG_MESSAGES.AUTH_SERVER_UNAVAILABLE, e.stack); } else { - console.warn(LOG_MESSAGES.AUTH_SERVER_UNAVAILABLE); + console.warn(LOG_MESSAGES.AUTH_SERVER_UNAVAILABLE, e.stack); } } diff --git a/src/services/tagsService.js b/src/services/tagsService.js index 0e52051..6599da6 100644 --- a/src/services/tagsService.js +++ b/src/services/tagsService.js @@ -3,6 +3,7 @@ const matter = require("gray-matter"); const { glob } = require("glob"); const createExcerpt = require("../utils/createExcerpt"); +const { winstonLogger } = require("../utils/createExcerpt"); const CONTENT_ROOT = path.resolve(__dirname, "../../content"); const pattern = `${CONTENT_ROOT}/**/*.md`; @@ -21,8 +22,8 @@ const matchedPosts = []; for (const filePath of files) { - const raw = await fs.readFile(filePath, "utf-8"); try { + const raw = await fs.readFile(filePath, "utf-8"); const { data: frontmatter, content } = matter(raw); const fileHash = hash(frontmatter); @@ -38,7 +39,8 @@ excerpt: createExcerpt(content, 200), }); } catch (e) { - console.log("File path", filePath, e.stack); + // Prevent the entire route from going down due to one bad file + winstonLogger.error("File path", filePath, e.stack); } }