Sindbad~EG File Manager
import User from "../model/user";
import bcrypt from "bcrypt";
import jwt from "jsonwebtoken";
import { failedResponse } from "../utils/responseFormat";
const TokenGenerate = (user) => {
return jwt.sign({ _id: user._id, role: user.role }, process.env.JWTSECRET, {
expiresIn: "30d",
});
};
const login = async (req, res) => {
try {
const { primary_email, password } = req.body;
const user = await User.findOne({ primary_email });
if (!user) {
return failedResponse({ res, error: "invalid Email" });
}
const passwordMatch = await bcrypt.compare(password, user.password);
if (!passwordMatch) {
return failedResponse({ res, error: "invalid Password" });
}
// Create a JWT token
const token = TokenGenerate(user);
res.setHeader("Authorization", token);
res.status(200).json({ token: token, user, message: "Login successfully" });
} catch (error) {
return failedResponse({
res,
error: error.message,
});
}
};
const authenticate = async (req, res) => {
try {
const user = await User.findOne(
{ _id: req.user._id }
// { createdOn: 0, modifiedOn: 0, __v: 0 }
);
if (!user) {
return failedResponse({ res, error: "No user found." });
}
// Create a JWT token
const token = TokenGenerate(user);
res.setHeader("Authorization", token);
res.status(200).json({ token: token, user, message: "success" });
} catch (error) {
return failedResponse({
res,
error: error.message,
});
}
};
//Abondoned
const protect = async (req, res, next) => {
try {
// 1). getting token and check it
let token;
if (
req.headers.authorization &&
req.headers.authorization.startsWith("Bearer")
) {
token = req.headers.authorization.split(" ")[1];
}
if (!token) {
return failedResponse({ res, error: "Invalid token" });
}
//verify method
// 2). Verification token like user id
const decoded = await jwt.verify(token, process.env.JWTSECRET);
// 3). Check if there user stil exit || deleted himself
const freshUser = await User.findOne({ _id: decoded._id });
if (!freshUser) {
return failedResponse({
res,
error:
"The user is not belong to this token! Please login to get access",
});
}
req.user = {
_id: freshUser._id,
first_name: freshUser.first_name,
role: freshUser.role,
};
next();
} catch (error) {
return failedResponse({ res, error: error.message });
}
};
const restrictTo = (...roles) => {
// roles are : admin, agent
return (req, res, next) => {
if (!roles.includes(req.user.role)) {
return failedResponse({ res, error: "You are not allowed!" });
}
next();
};
};
export default { login, authenticate, protect, restrictTo };
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists