diff --git a/app/controllers/reset.php b/app/controllers/reset.php index bf704af..f905525 100644 --- a/app/controllers/reset.php +++ b/app/controllers/reset.php @@ -83,12 +83,12 @@ function enviarCodigoInterno() try { $mail = new PHPMailer(true); $mail->isSMTP(); - $mail->Host = 'secure.emailsrvr.com'; - $mail->SMTPAuth = true; - $mail->Username = 'noreply@aduanasoft.com.mx'; - $mail->Password = $_ENV['SMTP_PASS']; + $mail->Host = 'secure.emailsrvr.com'; + $mail->SMTPAuth = true; + $mail->Username = 'noreply@aduanasoft.com.mx'; + $mail->Password = $_ENV['SMTP_PASS']; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; - $mail->Port = 587; + $mail->Port = 587; $mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | AduanaSoft'); $mail->addAddress($email); @@ -132,6 +132,111 @@ function enviarCodigoInterno() } } +function reenviarCodigoInterno() +{ + header('Content-Type: application/json'); + + // Validar sesión y datos requeridos + if (!isset($_SESSION['usuario_id'], $_SESSION['usuario_email'])) { + echo json_encode(['success' => false, 'message' => '⚠️ Sesión expirada. Vuelve a ingresar tu correo.']); + exit; + } + + $conn = getConnection(); + if (!$conn) { + echo json_encode(['success' => false, 'message' => '❌ Error de conexión con la base de datos.']); + exit; + } + + $id_usuario = $_SESSION['usuario_id']; + $emailEncrypted = encrypt($_SESSION['usuario_email']); + + // Obtener el último código activo de recuperación + $now = (new DateTime())->format('Y-m-d H:i:s'); + $sql = "SELECT TOP 1 codigo FROM recuperacion_password + WHERE email = ? AND estatus = 0 AND expiracion > ? + ORDER BY expiracion DESC"; + $stmt = sqlsrv_query($conn, $sql, [$emailEncrypted, $now]); + + if (!$stmt || !($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))) { + echo json_encode(['success' => false, 'message' => '❌ No se encontró un código activo para reenviar.']); + exit; + } + + $codigo = $row['codigo']; + + // Llamar a la función para reenviar el correo al respaldo + if (enviarCorreoRespaldo($conn, $id_usuario, $codigo)) { + echo json_encode(['success' => true, 'message' => '📤 Código reenviado al correo de respaldo.']); + } else { + echo json_encode(['success' => false, 'message' => '❌ Error al reenviar el código al correo de respaldo.']); + } + + exit; +} + +function enviarCorreoRespaldo($conn, $id_usuario, $codigo) +{ + // Obtener correo de respaldo del usuario + $sql = "SELECT correo FROM correo_respaldo WHERE id_usuario = ?"; + $stmt = sqlsrv_query($conn, $sql, [$id_usuario]); + + if (!$stmt || !($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))) { + return false; + } + + $correoRespaldo = $row['correo']; + if (empty($correoRespaldo)) { + return false; + } + + // Enviar código por correo al correo de respaldo + try { + $mail = new PHPMailer(true); + $mail->isSMTP(); + $mail->Host = 'secure.emailsrvr.com'; + $mail->SMTPAuth = true; + $mail->Username = 'noreply@aduanasoft.com.mx'; + $mail->Password = $_ENV['SMTP_PASS']; + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; + $mail->Port = 587; + + $mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | AduanaSoft'); + $mail->addAddress($correoRespaldo); + $mail->CharSet = 'UTF-8'; + $mail->isHTML(true); + $mail->Subject = 'Código para cambio de contraseña'; + + $mail->Body = " +