65 lines
2.2 KiB
JavaScript
65 lines
2.2 KiB
JavaScript
import jwt from "jsonwebtoken";
|
|
import { VAModel } from "../../../models/vaModel.js";
|
|
|
|
// Refresh Token VA
|
|
async function va_refresh_token_callback(req, res) {
|
|
try {
|
|
const { refreshToken } = req.body || {};
|
|
|
|
if (!refreshToken) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Refresh token missing",
|
|
});
|
|
}
|
|
|
|
// 🔍 Verify refresh token
|
|
jwt.verify(
|
|
refreshToken,
|
|
process.env.JWT_SECRET_REFRESH_TOKEN || "DocTrackerSecretKeyRefreshToken",
|
|
async (err, decoded) => {
|
|
if (err) {
|
|
return res.status(403).json({
|
|
success: false,
|
|
message: "Invalid or expired refresh token",
|
|
});
|
|
}
|
|
|
|
// Check if user still exists
|
|
const user = await VAModel.findById(decoded.id);
|
|
if (!user) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "User no longer exists",
|
|
});
|
|
}
|
|
|
|
// Generate a new access token
|
|
const newAccessToken = jwt.sign(
|
|
{
|
|
id: user._id,
|
|
email: user.userDetails.email,
|
|
name: user.userDetails.firstName,
|
|
},
|
|
process.env.JWT_SECRET_ACCESS_TOKEN || "DocTrackerAccessKey",
|
|
{ expiresIn: "24h" }
|
|
);
|
|
|
|
await VAModel.updateOne({ "userDetails.email": user.userDetails.email }, {
|
|
$set: { accessToken: newAccessToken }
|
|
})
|
|
|
|
return res.status(200).json({
|
|
success: true,
|
|
message: "New access token generated",
|
|
accessToken: newAccessToken,
|
|
});
|
|
}
|
|
);
|
|
} catch (error) {
|
|
console.error("va_register error:", error);
|
|
return res.status(500).json({ success: false, message: "Internal Server Error" });
|
|
}
|
|
}
|
|
|
|
export { va_refresh_token_callback }; |