This commit is contained in:
Mr Swift
2024-04-27 20:10:55 +03:30
parent f52f5496c5
commit ee6bd01224
30 changed files with 6503 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
const { constants } = require("../constants");
const errorHandler = (err, req, res, next) => {
const statusCode = res.statusCode ? res.statusCode : 500;
switch (statusCode) {
case constants.VALIDATION_ERROR:
res.status(statusCode).json({
title: "Validation Failed ",
msg: err.message,
stackTrace: err.stack,
});
break;
case constants.NOT_FOUND:
res.status(statusCode).json({
title: "Not found ",
msg: err.message,
stackTrace: err.stack,
});
break;
case constants.FORBIDOEN:
res.status(statusCode).json({
title: "Forbidoen ",
msg: err.message,
stackTrace: err.stack,
});
break;
case constants.SERVER_ERROR:
res.status(statusCode).json({
title: "Server Error ",
msg: err.message,
stackTrace: err.stack,
});
break;
case constants.UNAUTHORIZED:
res.status(statusCode).json({
title: "Unauthorized ",
msg: err.message,
stackTrace: err.stack,
});
break;
case constants.SITE_UNAUTHORIZED:
res.status(statusCode).json({
title: "Site Unauthorized ",
msg: err.message,
stackTrace: err.stack,
});
break;
case constants.TOO_MANY:
res.status(statusCode).json({
title: "Too many request",
msg: err.message,
stackTrace: err.stack,
});
break;
default:
console.log(err);
res.status(500).json({ err: err.message, msg: "Unhandled error" })
break;
}
};
module.exports = { name: "errorHandler", run: errorHandler };
+17
View File
@@ -0,0 +1,17 @@
const asyncHandler = require("express-async-handler");
const User = require("../models/userModels");
const hasPerma = (perm) => {
return asyncHandler(async (req, res, next) => {
const user = await User.findId(req.user.id)
if (user && (user.permissions.includes(perm) || !user.permissions.includes("ADMIN"))) {
return next()
} else {
res.status(401); throw new Error('کاربر مجوز لازم را ندارد');
}
})
}
module.exports = { name: "hasPermission", run: hasPerma };
+28
View File
@@ -0,0 +1,28 @@
const asyncHandler = require("express-async-handler");
const jwt = require("jsonwebtoken");
const Admin = require("../models/adminModels");
const validateAdminToken = asyncHandler(async (req, res, next) => {
let token = req.headers.siteuser || req.headers.SiteUser;
if (!token) {
res.status(401);
throw new Error("User is not authorized(N)");
} else {
const tokenA = await Admin.findOne({ token })
if (tokenA) {
jwt.verify(token, process.env.ACCESS_TOKEN_SECERT_ADMIN, (err, decoded) => {
if (err) {
res.status(401);
throw new Error("User is not authorized(JWT E)");
}
req.admin = decoded.user;
next();
});
} else {
res.status(401);
throw new Error("User is not authorized(DB N)");
}
}
});
module.exports = { name: "validateAdminToken", run: validateAdminToken };
+28
View File
@@ -0,0 +1,28 @@
const asyncHandler = require("express-async-handler");
const jwt = require("jsonwebtoken");
const User = require("../models/userModels");
const validateToken = asyncHandler(async (req, res, next) => {
let token = req.headers.authorization || req.headers.Authorization;
if (!token) {
res.status(401);
throw new Error("User is not authorized(N)");
} else {
const tokenA = await User.findOne({ token })
if (tokenA) {
jwt.verify(token, process.env.ACCESS_TOKEN_SECERT, (err, decoded) => {
if (err) {
res.status(401);
throw new Error("User is not authorized(JWT E)");
}
req.user = decoded.user;
next();
});
} else {
res.status(401);
throw new Error("User is not authorized(DB N)");
}
}
});
module.exports = { name: "validateToken", run: validateToken };