const express = require("express"); const helmet = require("helmet"); const compression = require("compression"); const morgan = require("morgan"); const cookieParser = require("cookie-parser"); const path = require("path"); const expressLayouts = require("express-ejs-layouts"); const flash = require("connect-flash"); const userMiddleware = require("../middleware/user"); const session = require("./session"); module.exports = () => { const app = express(); app.set("view engine", "ejs"); app.set( "views", path.join(__dirname, "../views") ); app.use(expressLayouts); app.set( "layout", "layouts/main" ); app.use( helmet({ contentSecurityPolicy: false }) ); app.use(compression()); app.use(morgan("dev")); app.use(cookieParser()); app.use( express.urlencoded({ extended: true }) ); app.use(express.json()); app.use(session); app.use(flash()); app.use(userMiddleware); app.use((req, res, next) => { res.set("X-PantryHub-Worktree", __dirname); res.locals.user = req.user || null; res.locals.success = req.flash("success"); res.locals.error = req.flash("error"); res.locals.info = req.flash("info"); res.locals.warning = req.flash("warning"); res.locals.title = "PantryHub"; next(); }); app.get("/__version", (req, res) => { res.set("Cache-Control", "no-store"); res.json({ app: "PantryHub", root: path.join(__dirname, ".."), pid: process.pid }); }); app.use( express.static( path.join(__dirname, "../public") ) ); app.use( "/api", require("../routes/api") ); app.use( "/", require("../routes/auth") ); app.use( "/", require("../routes/web") ); app.use((req, res) => { res.status(404) .render("errors/404"); }); return app; };