Colubrina/backend/lib/authorize.js
2022-08-31 18:46:40 +10:00

55 lines
1.4 KiB
JavaScript

const { User, Theme, Session } = require("../models")
const Errors = require("./errors")
const { Op } = require("sequelize")
module.exports = async function (req, res, next) {
try {
if (req.header("Authorization") && req.header("Authorization") !== "null") {
const token = req.header("Authorization")
const session = await Session.findOne({
where: {
session: token,
expiredAt: {
[Op.gt]: new Date()
}
}
})
if (session) {
const user = await User.findOne({
where: { id: session.userId },
attributes: {
exclude: ["totp", "password", "emailToken"]
},
include: [
{
model: Theme,
as: "themeObject"
}
]
})
if (user) {
if (user.banned) {
res.status(401).json({ errors: [Errors.banned] })
return
}
await user.update({
lastSeenAt: new Date().toISOString()
})
req.user = user
next()
}
} else {
res.status(401).json({ errors: [Errors.unauthorized] })
}
} else {
res.status(401).json({
errors: [
{
message: "You need to be logged in."
}
]
})
}
} catch (e) {
console.log(e)
}
}