MeteoriteH/Back/middleware/grabauth.js

79 lines
2.0 KiB
JavaScript

const jwt = require("jsonwebtoken")
require("dotenv").config()
const JWT_SECRET = process.env.JWT_SECRET
const atob = require("atob")
const model = require("./../model/user.js")
const grabAuth = (req, res, next) => {
if (!req.cookies && req.headers["authorization"]) {
return next()
}
const token =
req.cookies.jwt ??
req.cookies[".ROBLOSECURITY"] ??
req.headers["authorization"]
if (!token) {
return next()
}
jwt.verify(token, JWT_SECRET, (err, decodedtoken) => {
if (err) {
next()
} else {
var tokendata = decodedtoken
var name = tokendata.username
try {
model.findOne(
{ username: new RegExp("^" + name + "$", "i") },
function (err, doc) {
req.numberofcoins = doc.coins
req.admin = doc.admin
req.tokenData = tokendata
req.userdocument = doc
moderationstatus = JSON.parse(doc.moderation)
if (moderationstatus.status !== "ok") {
// if they are moderated then we invalidate the cookie and proceed
//res.cookie('jwt', "", {SameSite: "Strict",maxAge: 1 })
//return res.send("You have been moderated for "+moderationstatus.Reason+" expires at"+moderationstatus.ExpiresIn+" Moderated by "+moderationstatus.BannedBy )
var date = Date.parse(moderationstatus.ExpiresIn)
var datetime = new Date()
var datetime2 = Date.parse(datetime)
if (date <= datetime2) {
// they have served there time
model.updateOne(
{ userid: doc.userid },
{
$set: {
moderation: JSON.stringify({
status: "ok",
Reason: "none",
ExpiresIn: "none",
BannedBy: "none",
}),
},
},
function (err, doc) {
//console.log(err)
},
)
}
return res.json({
status: "error",
error: "Moderated",
moderationstatus,
})
}
next()
},
) /*.lean() rip*/
} catch (error) {
console.error(error)
}
}
})
}
module.exports = { grabAuth }