app.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. const express = require("express");
  2. const session = require("cookie-session");
  3. const mongoose = require("mongoose");
  4. const compression = require("compression");
  5. const https = require("https");
  6. const fs = require("fs");
  7. const Merchant = require("./models/merchant.js");
  8. const helper = require("./controllers/helper.js");
  9. let protectedRoutes = [
  10. "/dashboard",
  11. "/ingredients/create",
  12. "/ingredients/update",
  13. "/ingredients/create/spreadsheet"
  14. ];
  15. const app = express();
  16. mongoose.connect(`${process.env.DB}/inventory-management`, {useNewUrlParser: true, useUnifiedTopology: true});
  17. app.set("view engine", "ejs");
  18. app.use(express.static(__dirname + "/views"));
  19. let httpsServer = {};
  20. if(process.env.NODE_ENV === "production"){
  21. httpsServer = https.createServer({
  22. key: fs.readFileSync("/etc/letencrypt/live/www.thesubline.com/privkey.pem", "utf8"),
  23. cert: fs.readFileSync("/etc/letsencrypt/live/www.leemorgan.io/fullchain.pem", "utf8")
  24. }, app);
  25. app.use((req, res, next)=>{
  26. if(req.secure === true){
  27. next();
  28. }else{
  29. res.redirect(`https://${req.headers.host}${req.url}`);
  30. }
  31. });
  32. }
  33. app.use(compression());
  34. app.use(session({
  35. secret: "Super Secret Subline Subliminally Saving Secrets So Sneaky Snakes Stay Sullen. Simply Superb.",
  36. cookie: {secure: true},
  37. saveUninitialized: true,
  38. resave: false
  39. }));
  40. app.use((req, res, next)=>{
  41. if(protectedRoutes.includes(req.url)){
  42. if(req.session.user === undefined) {
  43. req.session.error = "PLEASE LOG IN";
  44. return res.redirect("/");
  45. }
  46. Merchant.findOne({"session.sessionId": req.session.user})
  47. .then((merchant)=>{
  48. if(merchant === null){
  49. throw "no merchant";
  50. }
  51. if(merchant.session.date < new Date()){
  52. let newExpiration = new Date();
  53. newExpiration.setDate(newExpiration.getDate() + 90);
  54. merchant.session.sessionId = helper.generateId(25);
  55. merchant.session.date = newExpiration;
  56. merchant.save();
  57. return res.redirect("/");
  58. }
  59. res.locals.merchant = merchant;
  60. return next();
  61. })
  62. .catch((err)=>{
  63. if(err === "no merchant"){
  64. req.session.error = "PLEASE LOG IN";
  65. return res.redirect("/");
  66. }
  67. return res.json("ERROR: UNABLE TO RETRIEVE DATA");
  68. });
  69. }else{
  70. return next();
  71. }
  72. });
  73. app.use(express.urlencoded({extended: true}));
  74. app.use(express.json());
  75. require("./routes")(app);
  76. if(process.env.NODE_ENV === "production"){
  77. httpsServer.listen(process.env.HTTPS_PORT, ()=>{});
  78. }
  79. app.listen(process.env.PORT, ()=>{});