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 passportConfig from './libs/passport'; // Import des routes import globalRoutes from './routes'; import authRoutes from './routes/auth'; import {trustProxy, env, mongoDbUri, secret, port} from './config'; import {isXhr, getBaseUrl} from './helpers'; // import indexmkactRouterApiV1 from "./routes/api/v1/contact"; passportConfig(passport); mongoose.set('strictQuery', false); mongoose .connect(mongoDbUri, {useNewUrlParser: true, useUnifiedTopology: true}) .catch((err) => { console.log('Mongo err:', err); 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.set('trust proxy', trustProxy); app.use(cookieParser()); app.use(flash()); app.use(express.json({limit: '50mb'})); app.use(express.urlencoded({extended: false, limit: '50mb'})); app.use(session(sess)); if (['production'].indexOf(env) !== -1) { sess.cookie.secure = true; /* eslint-disable func-names */ app.use((req, res, next) => { if (req.secure) { next(); } else { 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('/uploads', express.static(path.join(__dirname, '../uploads'))); // Init des routes app.use('/', globalRoutes); app.use('/', authRoutes); // Handle 404 app.use((req, res) => { if (isXhr(req)) { res.status(404).send({message: '404: Not found'}); } else { res.status(404); res.render('index', { pagename: '404', viewname: 'error', page: { title: '404: Cette page n\'existe pas.', }, baseUrl: getBaseUrl(req), params: {}, query: {}, user: req.user, error: 'La page demandée n\'existe pas sur le server', }); } }); // Handle 500 app.use((error, req, res, next) => { if (isXhr(req)) { const {message, errorCode, date} = error; res.status(error.errorCode || 500).send({message, errorCode, date}); } else { console.log('ERR:', error); res.status(error.errorCode || 500); res.render('index', { pagename: '500', viewname: 'error', page: { title: '500: Oups… le serveur a crashé !', }, baseUrl: getBaseUrl(req), params: {}, query: {}, user: req.user, error, }); } }); console.log(`Server ready and listening on port ${port}!`); export default app;