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 };