103 lines
3.2 KiB
JavaScript
103 lines
3.2 KiB
JavaScript
import jwt from "jsonwebtoken";
|
|
import { VAModel, ClientModel } from "../models/vaModel.js";
|
|
import logger from "../config/logger.js";
|
|
|
|
async function authValidator(req, res, next) {
|
|
try {
|
|
const sf_token = req.headers.sf_token;
|
|
if (sf_token) {
|
|
const { vaId } = req.params;
|
|
if(vaId) req.body.vaId = vaId;
|
|
next();
|
|
} else {
|
|
const accessToken = req.headers.token;
|
|
if (!accessToken) return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
|
|
// return res.status(200).json({
|
|
// success: true,
|
|
// message: "Log Out Successfull",
|
|
// });
|
|
|
|
const decoded = jwt.verify(accessToken, process.env.JWT_SECRET_ACCESS_TOKEN);
|
|
|
|
if (decoded && ("id" in decoded) && decoded.id !== null && ("email" in decoded)) {
|
|
const vaEmail = decoded.email;
|
|
|
|
const vaUser = await VAModel.findOne({ "userDetails.email": vaEmail })
|
|
if (!vaUser) {
|
|
return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
}
|
|
if (!("accessToken" in vaUser) || !vaUser.accessToken) {
|
|
return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
}
|
|
|
|
if (vaUser.accessToken === accessToken) {
|
|
req.body.vaId = vaUser._id
|
|
req.body.vaEmail = vaEmail
|
|
next();
|
|
} else {
|
|
return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
} catch (error) {
|
|
logger.error("AuthValidator - Middleware (CATCH Block)", error.message);
|
|
return res.send(401).status({ "message": error.message })
|
|
}
|
|
}
|
|
|
|
async function clientAuthValidator(req, res, next) {
|
|
try {
|
|
const accessToken = req.headers.token;
|
|
|
|
if (!accessToken) {
|
|
return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
}
|
|
|
|
const decoded = jwt.verify(accessToken, process.env.JWT_SECRET_ACCESS_TOKEN);
|
|
|
|
if (decoded && decoded.id && decoded.email) {
|
|
const clientEmail = decoded.email;
|
|
|
|
const clientUser = await ClientModel.findOne({ "userDetails.email": clientEmail });
|
|
|
|
if (!clientUser) {
|
|
return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
}
|
|
|
|
if (!clientUser.accessToken || clientUser.accessToken !== accessToken) {
|
|
return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
}
|
|
|
|
// Attach client info to request object for use in subsequent middleware/controllers
|
|
req.body.clientId = clientUser._id;
|
|
req.body.clientEmail = clientEmail;
|
|
req.body.clientName = decoded.name;
|
|
|
|
next();
|
|
} else {
|
|
return res.status(401).json({ success: false, message: "Not Authorized" });
|
|
}
|
|
|
|
} catch (error) {
|
|
logger.error("clientAuthValidator - Middleware (CATCH Block)", error.message);
|
|
|
|
if (error.name === "TokenExpiredError") {
|
|
return res.status(401).json({ success: false, message: "Token expired" });
|
|
}
|
|
|
|
if (error.name === "JsonWebTokenError") {
|
|
return res.status(401).json({ success: false, message: "Invalid token" });
|
|
}
|
|
|
|
return res.status(401).json({ success: false, message: "Authentication failed" });
|
|
}
|
|
}
|
|
|
|
export {
|
|
authValidator,
|
|
clientAuthValidator
|
|
}
|