Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 4x 4x 4x 4x 56x 56x 12x 44x 44x 42x 43x 42x 6x 38x 4x 34x 56x 56x 38x 18x 4x | const passport = require('passport'); const { status: httpStatus } = require('http-status'); const ApiError = require('../utils/ApiError'); const { roleRights } = require('../config/roles'); const verifyCallback = (req, resolve, reject, requiredRights) => async (err, user, info) => { if (err || info || !user) { return reject(new ApiError(httpStatus.UNAUTHORIZED, 'Please authenticate')); } req.user = user; if (requiredRights.length) { const userRights = roleRights.get(user.role); const hasRequiredRights = requiredRights.every((requiredRight) => userRights.includes(requiredRight)); if (!hasRequiredRights && req.params.userId !== user.id) { return reject(new ApiError(httpStatus.FORBIDDEN, 'Forbidden')); } } resolve(); }; const auth = (...requiredRights) => async (req, res, next) => { return new Promise((resolve, reject) => { passport.authenticate('jwt', { session: false }, verifyCallback(req, resolve, reject, requiredRights))(req, res, next); }) .then(() => next()) .catch((err) => next(err)); }; module.exports = auth; |