From a41987b327b56c13ac4e9dee525cae0dfbf98aaa Mon Sep 17 00:00:00 2001 From: Sathishkumar Krishnan Date: Mon, 27 Dec 2021 12:29:56 +0530 Subject: [PATCH] fix: merge auth utils --- src/config/auth.js | 53 ------------------------------- src/controller/index.js | 2 +- src/controller/utils/authorize.js | 51 +++++++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 56 deletions(-) delete mode 100644 src/config/auth.js diff --git a/src/config/auth.js b/src/config/auth.js deleted file mode 100644 index ec146ed..0000000 --- a/src/config/auth.js +++ /dev/null @@ -1,53 +0,0 @@ -const jwt = require("jsonwebtoken"); -const { JWT_SECRET } = require("./env"); -const User = require("../models/User"); -const constants = require("./constants"); - -const authenticate = async (token) => { - const decodedToken = jwt.verify(token, JWT_SECRET); - if (decodedToken) { - return await User.findById(decodedToken.id) - .populate({ path: "roles", populate: "permissions" }) - .populate("permissions"); - } -}; - -const authorize = async ( - user, - requiredRoles = [], - requiredPermissions = [] -) => { - const userRoles = user.roles.map((_) => _._id); - const userPermissions = [ - ...user.permissions.map((_) => _._id), - ...userRoles.map((_) => _.permissions).flat(), - ]; - - return ( - user != undefined && - requiredRoles.every((_) => userRoles.includes(_)) && - requiredPermissions.every((_) => userPermissions.includes(_)) - ); -}; - -module.exports = { - AuthenticateMiddleware: async (req, res, next) => { - try { - const token = req.headers.authorization || ""; - if (token) { - const user = authenticate(token); - res.locals.user = user; - next(); - } - } catch (error) { - res - .status(401) - .send({ - success: false, - error: constants.AUTHENTICATION_FAILURE_ERROR_MESSAGE, - }); - } - }, - - AuthorizeUser: authorize, -}; diff --git a/src/controller/index.js b/src/controller/index.js index 64bc9dd..3cbe6c5 100644 --- a/src/controller/index.js +++ b/src/controller/index.js @@ -2,7 +2,7 @@ const router = require("express").Router(); const userRouter = require("./user.router"); const userRoleRouter = require("./userRole.router"); const userPermissionRouter = require("./userPermission.router"); -const { AuthenticateMiddleware } = require("../config/auth"); +const { AuthenticateMiddleware } = require("./utils/authorize"); const companyRouter = require("./company.router"); const warehouseRouter = require("./warehouse.router"); diff --git a/src/controller/utils/authorize.js b/src/controller/utils/authorize.js index 4c17cdc..11e801e 100644 --- a/src/controller/utils/authorize.js +++ b/src/controller/utils/authorize.js @@ -1,11 +1,41 @@ const UserRole = require("../../models/UserRole"); -const { AuthorizeUser } = require("../../config/auth"); const { SUPER_ADMIN_ROLE, AUTHORIZATION_FAILURE_ERROR_MESSAGE } = require("../../config/constants"); +const jwt = require("jsonwebtoken"); +const { JWT_SECRET } = require("./env"); +const User = require("../models/User"); +const constants = require("./constants"); + +const authenticate = async (token) => { + const decodedToken = jwt.verify(token, JWT_SECRET); + if (decodedToken) { + return await User.findById(decodedToken.id) + .populate({ path: "roles", populate: "permissions" }) + .populate("permissions"); + } +}; + +const authorize = async ( + user, + requiredRoles = [], + requiredPermissions = [] +) => { + const userRoles = user.roles.map((_) => _._id); + const userPermissions = [ + ...user.permissions.map((_) => _._id), + ...userRoles.map((_) => _.permissions).flat(), + ]; + + return ( + user != undefined && + requiredRoles.every((_) => userRoles.includes(_)) && + requiredPermissions.every((_) => userPermissions.includes(_)) + ); +}; module.exports = { SuperAdminCheck: async (req, res, next) => { const SuperAdmin = await UserRole.findOne({ name: SUPER_ADMIN_ROLE }); - if (AuthorizeUser(req.locals.user, [SuperAdmin.id])) { + if (authorize(req.locals.user, [SuperAdmin.id])) { next(); } else { res @@ -13,4 +43,21 @@ module.exports = { .send({ success: false, error: AUTHORIZATION_FAILURE_ERROR_MESSAGE }); } }, + AuthenticateMiddleware: async (req, res, next) => { + try { + const token = req.headers.authorization || ""; + if (token) { + const user = authenticate(token); + res.locals.user = user; + next(); + } + } catch (error) { + res.status(401).send({ + success: false, + error: constants.AUTHENTICATION_FAILURE_ERROR_MESSAGE, + }); + } + }, + + AuthorizeUser: authorize, };