39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
const jwt = require("jsonwebtoken")
|
|
const { getOrCacheUserModeration } = require("../services/redis/userModerationCache.service")
|
|
|
|
function getBearerToken(req) {
|
|
const h = req.headers.authorization
|
|
if (h) {
|
|
const [type, token] = h.split(" ")
|
|
if (type === "Bearer" && token) return token
|
|
}
|
|
const cookieToken = req.cookies?.at
|
|
return cookieToken || null
|
|
}
|
|
|
|
module.exports = async function requireAuth(req, res, next) {
|
|
const token = getBearerToken(req)
|
|
if (!token) return res.status(401).json({ error: "Token yok" })
|
|
|
|
try {
|
|
const decoded = jwt.verify(token, process.env.JWT_ACCESS_SECRET)
|
|
|
|
req.auth = {
|
|
userId: typeof decoded.sub === "string" ? Number(decoded.sub) : decoded.sub,
|
|
role: decoded.role,
|
|
jti: decoded.jti,
|
|
}
|
|
|
|
if (!req.auth.userId) return res.status(401).json({ error: "Token geçersiz" })
|
|
|
|
const moderation = await getOrCacheUserModeration(req.auth.userId)
|
|
if (moderation?.disabledAt) {
|
|
return res.status(403).json({ error: "Hesap devre disi" })
|
|
}
|
|
|
|
next()
|
|
} catch (err) {
|
|
return res.status(401).json({ error: "Token geçersiz" })
|
|
}
|
|
}
|