app.js 2.8 KB

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