57 lines
2.8 KiB
JavaScript
57 lines
2.8 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.RequestPasswordResetCommandHandler = void 0;
|
|
const EmailService_1 = require("../../Services/EmailService");
|
|
const TokenService_1 = require("../../Services/TokenService");
|
|
const Logger_1 = require("../../Services/Logger");
|
|
class RequestPasswordResetCommandHandler {
|
|
constructor(userRepo) {
|
|
this.userRepo = userRepo;
|
|
this.emailService = new EmailService_1.EmailService();
|
|
}
|
|
async execute(cmd) {
|
|
try {
|
|
if (!cmd.email) {
|
|
throw new Error('Email is required');
|
|
}
|
|
// Find user by email
|
|
const user = await this.userRepo.findByEmail(cmd.email);
|
|
if (!user) {
|
|
// Don't reveal if user exists or not for security reasons
|
|
// Still return true but don't send email
|
|
(0, Logger_1.logAuth)(`Password reset requested for non-existent email: ${cmd.email}`);
|
|
return true;
|
|
}
|
|
// Generate password reset token
|
|
const resetTokenData = TokenService_1.TokenService.generatePasswordResetToken();
|
|
// Update user with reset token
|
|
user.token = await TokenService_1.TokenService.hashToken(resetTokenData.token);
|
|
user.TokenExpires = resetTokenData.expiresAt;
|
|
await this.userRepo.update(user.id, user);
|
|
// Send password reset email
|
|
try {
|
|
const baseUrl = process.env.APP_BASE_URL || 'http://localhost:3000';
|
|
const resetUrl = TokenService_1.TokenService.generatePasswordResetUrl(baseUrl, resetTokenData.token);
|
|
const emailSent = await this.emailService.sendPasswordResetEmail(user.email, `${user.fname} ${user.lname}`, resetTokenData.token, resetUrl);
|
|
if (!emailSent) {
|
|
(0, Logger_1.logWarning)(`Failed to send password reset email to ${user.email}`);
|
|
// Don't throw error - request should still succeed even if email fails
|
|
}
|
|
else {
|
|
(0, Logger_1.logAuth)(`Password reset email sent successfully to ${user.email}`);
|
|
}
|
|
}
|
|
catch (emailError) {
|
|
(0, Logger_1.logError)('Error sending password reset email', emailError instanceof Error ? emailError : new Error(String(emailError)));
|
|
// Don't throw error - request should still succeed even if email fails
|
|
}
|
|
return true;
|
|
}
|
|
catch (error) {
|
|
(0, Logger_1.logError)('Password reset request error', error instanceof Error ? error : new Error(String(error)));
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
exports.RequestPasswordResetCommandHandler = RequestPasswordResetCommandHandler;
|
|
//# sourceMappingURL=RequestPasswordResetCommandHandler.js.map
|