122 lines
4.3 KiB
JavaScript
122 lines
4.3 KiB
JavaScript
import PasswordResetRepository from "../repository/passwordReset.repository.js";
|
|
import PasswordResetService from "../services/passwordReset.service.js";
|
|
// import EmailService from "../services/email.service.js";
|
|
import logger from "../config/logger.js";
|
|
|
|
const passwordResetService = new PasswordResetService(
|
|
new PasswordResetRepository(),
|
|
// new EmailService({
|
|
// host: process.env.SMTP_HOST,
|
|
// port: process.env.SMTP_PORT,
|
|
// user: process.env.SMTP_USER,
|
|
// pass: process.env.SMTP_PASS,
|
|
// from: process.env.EMAIL_FROM,
|
|
// })
|
|
);
|
|
|
|
// VA: Request password reset
|
|
async function va_request_password_reset(req, res) {
|
|
try {
|
|
const { email } = req.body;
|
|
if (!email) {
|
|
return res.status(400).json({ success: false, message: "Email is required" });
|
|
}
|
|
|
|
const result = await passwordResetService.requestPasswordReset(email, 'va');
|
|
logger.info(`VA password reset requested for: ${email}`);
|
|
return res.status(200).json(result);
|
|
|
|
} catch (error) {
|
|
logger.error(`VA PasswordResetController - Request error: ${error.message}`);
|
|
return res.status(500).json({ success: false, message: "Failed to process password reset request" });
|
|
}
|
|
}
|
|
|
|
// Client: Request password reset
|
|
async function client_request_password_reset(req, res) {
|
|
try {
|
|
const { email } = req.body;
|
|
if (!email) {
|
|
return res.status(400).json({ success: false, message: "Email is required" });
|
|
}
|
|
|
|
const result = await passwordResetService.requestPasswordReset(email, 'client');
|
|
logger.info(`Client password reset requested for: ${email}`);
|
|
return res.status(200).json(result);
|
|
|
|
} catch (error) {
|
|
logger.error(`Client PasswordResetController - Request error: ${error.message}`);
|
|
return res.status(500).json({ success: false, message: "Failed to process password reset request" });
|
|
}
|
|
}
|
|
|
|
// Render reset password form (shared for both VA and Client)
|
|
async function render_reset_form(req, res) {
|
|
try {
|
|
const { token, userType } = req.query;
|
|
|
|
if (!token || !userType) {
|
|
return res.render('auth/reset-password-error', { error: 'Reset token or user type is missing', userType: userType || 'va' });
|
|
}
|
|
|
|
// Validate token
|
|
const validation = await passwordResetService.validateResetToken(token, userType);
|
|
|
|
if (!validation.valid) {
|
|
return res.render('auth/reset-password-error', { error: validation.message, userType: userType || 'va' });
|
|
}
|
|
|
|
// Render reset form with token
|
|
res.render('auth/reset-password-form', { token, userType, error: null });
|
|
|
|
} catch (error) {
|
|
logger.error(`PasswordResetController - Render form error: ${error.message}`);
|
|
res.render('auth/reset-password-error', { error: 'Failed to load reset form' });
|
|
}
|
|
}
|
|
|
|
// Process password reset form submission (shared for both VA and Client)
|
|
async function process_reset(req, res) {
|
|
try {
|
|
const { token, password, confirmPassword, userType } = req.body;
|
|
|
|
if (!token || !password || !confirmPassword || !userType) {
|
|
return res.render('auth/reset-password-form', {
|
|
token, userType, error: 'All fields are required'
|
|
});
|
|
}
|
|
|
|
if (password !== confirmPassword) {
|
|
return res.render('auth/reset-password-form', {
|
|
token, userType, error: 'Passwords do not match'
|
|
});
|
|
}
|
|
|
|
if (password.length < 6) {
|
|
return res.render('auth/reset-password-form', {
|
|
token, userType, error: 'Password must be at least 6 characters long'
|
|
});
|
|
}
|
|
|
|
// Reset password
|
|
await passwordResetService.resetPassword(token, password, userType);
|
|
|
|
// Render success page
|
|
res.render('auth/reset-password-success', {userType});
|
|
|
|
} catch (error) {
|
|
logger.error(`PasswordResetController - Process reset error: ${error.message}`);
|
|
res.render('auth/reset-password-form', {
|
|
token: req.body.token,
|
|
userType: req.body.userType,
|
|
error: error.message
|
|
});
|
|
}
|
|
}
|
|
|
|
export {
|
|
va_request_password_reset,
|
|
client_request_password_reset,
|
|
render_reset_form,
|
|
process_reset
|
|
}; |