import path from "path"; import express from "express"; import cookieParser from "cookie-parser"; import passport from "passport"; import mongoose from "mongoose"; import flash from "connect-flash"; import session from "express-session"; import MongoStore from "connect-mongo"; import config, { env, mongoDbUri, secret } from "./config"; import indexRouter from "./routes/index"; // Mongoose schema init require("./models/users"); require("./libs/passport")(passport); mongoose .connect(mongoDbUri, { useNewUrlParser: true, useUnifiedTopology: true }) .catch(() => { process.exit(); }); const sess = { cookie: { maxAge: 86400000, }, secret, saveUninitialized: false, resave: false, store: MongoStore.create({ mongoUrl: mongoDbUri, mongoOptions: { useNewUrlParser: true, useUnifiedTopology: true }, }), }; const app = express(); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(flash()); app.use(session(sess)); if (["production"].indexOf(env) !== -1) { app.enable("trust proxy", 1); sess.cookie.secure = true; /* eslint-disable func-names */ app.use((req, res, next) => { if (req.secure) { // request was via https, so do no special handling next(); } else { // request was via http, so redirect to https res.redirect(`https://${req.headers.host}${req.url}`); } }); } app.use(passport.initialize()); app.use(passport.session()); app.set("views", path.join(__dirname, "views")); app.set("view engine", "ejs"); app.use(express.static(path.join(__dirname, "../public"))); app.use( "/libs/jquery", express.static(path.join(__dirname, "../node_modules/jquery/dist/")) ); app.use( "/libs/mdbootstrap", express.static(path.join(__dirname, "../node_modules/mdbootstrap")) ); app.use("/", indexRouter); // Handle 404 app.use((req, res) => { if (req.xhr) { res.status(404).send({ message: "404: Not found" }); } else { res.status(404).render("error", { page: { title: `404: Cette page n'existe pas.` }, errorCode: 404, user: req.user || null, config, session: req.session || null, flashInfo: null, query: null, params: null, }); } }); // Handle 500 app.use((error, req, res, next) => { if (req.xhr) { res.status(error.errorCode || 500).send({ message: error.message }); } else { res.status(500); res.render("error", { page: { title: "500: Oups… le serveur a crashé !", error }, errorCode: error.errorCode || 500, user: req.user || null, config, session: req.session || null, flashInfo: null, query: null, params: null, }); next(); } }); export default app;