| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- const express = require("express");
- const session = require("cookie-session");
- const mongoose = require("mongoose");
- const compression = require("compression");
- const https = require("https");
- const fs = require("fs");
- const Merchant = require("./models/merchant.js");
- const helper = require("./controllers/helper.js");
- let protectedRoutes = [
- "/dashboard",
- "/ingredients/create",
- "/ingredients/update",
- "/ingredients/create/spreadsheet",
- "/ingredients/download/spreadsheet"
- ];
- const app = express();
- mongoose.connect(`${process.env.DB}/inventory-management`, {useNewUrlParser: true, useUnifiedTopology: true});
- app.set("view engine", "ejs");
- app.use(express.static(__dirname + "/views"));
- let httpsServer = {};
- if(process.env.NODE_ENV === "production"){
- httpsServer = https.createServer({
- key: fs.readFileSync("/etc/letencrypt/live/www.thesubline.com/privkey.pem", "utf8"),
- cert: fs.readFileSync("/etc/letsencrypt/live/www.leemorgan.io/fullchain.pem", "utf8")
- }, app);
- app.use((req, res, next)=>{
- if(req.secure === true){
- next();
- }else{
- res.redirect(`https://${req.headers.host}${req.url}`);
- }
- });
- }
- app.use(compression());
- app.use(session({
- secret: "Super Secret Subline Subliminally Saving Secrets So Sneaky Snakes Stay Sullen. Simply Superb.",
- cookie: {secure: true},
- saveUninitialized: true,
- resave: false
- }));
- app.use((req, res, next)=>{
- if(protectedRoutes.includes(req.url)){
- if(req.session.user === undefined) {
- req.session.error = "PLEASE LOG IN";
- return res.redirect("/");
- }
- Merchant.findOne({"session.sessionId": req.session.user})
- .then((merchant)=>{
- if(merchant === null){
- throw "no merchant";
- }
- if(merchant.session.date < new Date()){
- let newExpiration = new Date();
- newExpiration.setDate(newExpiration.getDate() + 90);
- merchant.session.sessionId = helper.generateId(25);
- merchant.session.date = newExpiration;
- merchant.save();
- return res.redirect("/");
- }
- res.locals.merchant = merchant;
- return next();
- })
- .catch((err)=>{
- if(err === "no merchant"){
- req.session.error = "PLEASE LOG IN";
- return res.redirect("/");
- }
- return res.json("ERROR: UNABLE TO RETRIEVE DATA");
- });
- }else{
- return next();
- }
- });
- app.use(express.urlencoded({extended: true}));
- app.use(express.json());
- require("./routes")(app);
- if(process.env.NODE_ENV === "production"){
- httpsServer.listen(process.env.HTTPS_PORT, ()=>{});
- }
- app.listen(process.env.PORT, ()=>{});
|