app.js 2.8 KB

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