require("dotenv").config(); var createError = require("http-errors"); var express = require("express"); var path = require("path"); var cookieParser = require("cookie-parser"); var session = require("express-session"); var csrf = require("csurf"); var passport = require("passport"); var logger = require("morgan"); global.XMLHttpRequest = require("xhr2"); var teamsnap = require("teamsnap.js"); var indexRouter = require("./routes/index"); var authRouter = require("./routes/auth"); var app = express(); // view engine setup app.set("views", path.join(__dirname, "views")); app.set("view engine", "pug"); app.locals.pluralize = require("pluralize"); app.use(logger("dev")); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, "public"))); app.use( "/css", express.static(path.join(__dirname, "node_modules/bootstrap/dist/css")) ); app.use( "/css", express.static( path.join(__dirname, "node_modules/@teamsnap/teamsnap-ui/dist/css") ) ); app.use( "/font", express.static(path.join(__dirname, "node_modules/bootstrap-icons/font")) ); app.use( session({ teamsnap_token: "", current_team: "", secret: "keyboard cat", resave: false, // don't save session if unmodified saveUninitialized: false, // don't create session until something stored }) ); app.use(csrf()); app.use(passport.authenticate("session")); app.use(function (req, res, next) { var msgs = req.session.messages || []; res.locals.messages = msgs; res.locals.hasMessages = !!msgs.length; req.session.messages = []; next(); }); app.use(function (req, res, next) { res.locals.csrfToken = req.csrfToken(); next(); }); app.use("/", authRouter); app.use("/", indexRouter); // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get("env") === "development" ? err : {}; console.log("error:", err); // render the error page res.status(err.status || 500); res.render("error", { message: err.message }); }); module.exports = app;