const UserModel = require('../models/UserModel') const jwt = require('jsonwebtoken') const { expireBlockSuspensionIfNeeded, getBlockedAccountResponse } = require('../utils/blockSuspension') module.exports = async (req, res, next) => { try { if (!('authorization' in req.headers)) { return res.status(401).send({ status: 'error', code: 401, message: 'You are not authorized!' }) } const token = req.header('Authorization').split(' ')[1] if (!token) return res.status(401).send('Access Denied') const decodedToken = jwt.verify(token, process.env.APP_SECRET) if (!decodedToken) { return res.status(401).send({ status: 'error', code: 401, message: 'Your token is not valid!' }) } let user = await UserModel.findById(decodedToken.id) user = await expireBlockSuspensionIfNeeded(user) const blockResponse = getBlockedAccountResponse(user) if (blockResponse) { return res.status(403).send(blockResponse) } req.user = user next() } catch (error) { console.error('Error in blockCheck middleware:', error) res.status(500).send({ status: 'error', code: 500, message: 'Server error' }) } }