| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- const Merchant = require("./models/merchant.js")
- const helper = require("./controllers/helper.js");
- const axios = require("axios");
- module.exports = {
- verifySession: function(req, res, next){
- if(req.session.user === undefined) {
- req.session.error = "PLEASE LOG IN";
- return res.redirect("/login");
- }
-
- Merchant.findOne({"session.sessionId": req.session.user})
- .then(async (merchant)=>{
- if(merchant === null){
- throw "login";
- }
-
- //Check if session is out of date
- 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();
- throw "login";
- }
- //Check if email has not been verified
- if(merchant.status.includes("unverified")){
- req.session.error = "PLEASE VERIFY YOUR EMAIL ADDRESS";
- return res.redirect(`/verify/email/${merchant._id}`);
- }
- //Check for suspended account
- if(merchant.status.includes("suspended")){
- req.session.error = "ACCOUNT SUSPENDED. PLEASE CONTACT SUPPORT IF THIS IS IN ERROR";
- return res.redirect("/");
- }
- //Check for out of date access token
- let cutoff = new Date();
- cutoff.setDate(cutoff.getDate() + 1);
- if(merchant.square.expires < cutoff){
- let data = await axios.post(`${process.env.SQUARE_ADDRESS}/oauth2/token`, {
- client_id: process.env.SUBLINE_SQUARE_APPID,
- client_secret: process.env.SUBLINE_SQUARE_APPSECRET,
- grant_type: "refresh_token",
- refresh_token: merchant.square.refreshToken
- });
- merchant.square.accessToken = data.data.access_token;
- merchant.square.expires = new Date(data.data.expires_at);
- await merchant.save();
- }
- res.locals.merchant = merchant;
- return next();
- })
- .catch((err)=>{
- if(err === "login"){
- req.session.user = undefined;
- req.session.error = "PLEASE LOG IN";
- return res.redirect("/login");
- }
- return res.json("ERROR: UNABLE TO RETRIEVE DATA");
- });
- },
- formatBanner: function(req, res, next){
- if(req.session.error !== undefined){
- res.locals.banner = {
- type: "error",
- message: req.session.error,
- color: "red"
- };
- req.session.error = undefined;
- }else if(req.session.success !== undefined){
- res.locals.banner = {
- type: "notification",
- message: req.session.success,
- color: "green"
- };
- req.session.success = undefined;
- }
- return next();
- }
- }
|