Resumen diario

This commit is contained in:
2025-05-30 10:59:54 -06:00
parent f6c9495b3e
commit 59b9b402fb
4 changed files with 642 additions and 49 deletions

View File

@@ -748,9 +748,7 @@ function enviarNotificacionSeguridadIntentos($emailDestino, $nombreUsuario, $dat
$asunto = "🚨 Alerta de Seguridad - Intentos de Verificación Excedidos";
$mail->Subject = $asunto;
$tipoCorreo = $esCorreoAdicional ? "(Correo Adicional)" : "";
$mail->Body = "
<html>
<head>
@@ -761,7 +759,6 @@ function enviarNotificacionSeguridadIntentos($emailDestino, $nombreUsuario, $dat
<div style='max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 10px;'>
<div style='text-align: center; margin-bottom: 30px;'>
<h1 style='color: #dc3545; margin: 0;'>🚨 Alerta de Seguridad</h1>
<p style='color: #666; margin: 5px 0;'>$tipoCorreo</p>
</div>
<div style='background-color: #f8f9fa; padding: 20px; border-radius: 8px; margin-bottom: 20px;'>
@@ -820,85 +817,189 @@ function enviarNotificacionSeguridadIntentos($emailDestino, $nombreUsuario, $dat
}
}
/** Función para enviar el email de notificación de cuenta bloqueado **/
function enviarNotificacionCuentaBloqueada($email, $esCorreoAdicional = false)
/** Función para enviar el email de notificación de cuenta bloqueada **/
function enviarNotificacionCuentaBloqueada($email)
{
$conn = getConnection();
if (!$conn) throw new Exception("No se pudo conectar a la base de datos");
if (!$conn) {
throw new Exception("No se pudo conectar a la base de datos");
}
// Buscar información del usuario por email (incluyendo correo extra)
$emailEncrypted = encrypt($email);
$sqlNotif = "SELECT nombre, email FROM usuarios_sistema WHERE email = ?";
$stmt = sqlsrv_query($conn, $sqlNotif, [$emailEncrypted]);
$sqlNotif = "
SELECT
u.nombre,
u.email,
u.notificaciones,
u.notificaciones_extra,
ce.correo as correo_extra
FROM usuarios_sistema u
LEFT JOIN correo_extra ce ON u.id_usuario = ce.id_usuario
WHERE u.email = ?";
if (!$stmt) throw new Exception("Error al consultar información del usuario");
$stmtUsuario = sqlsrv_query($conn, $sqlNotif, [$emailEncrypted]);
if ($stmtUsuario === false) {
throw new Exception("Error al consultar información del usuario");
}
$usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
sqlsrv_free_stmt($stmt);
$usuario = sqlsrv_fetch_array($stmtUsuario, SQLSRV_FETCH_ASSOC);
sqlsrv_free_stmt($stmtUsuario);
if (!$usuario) {
error_log("⚠️ Usuario no encontrado para enviar notificación de cuenta bloqueada");
return false;
}
// 🔐 Desencriptar datos sensibles
$usuario['email'] = decrypt($usuario['email']);
$usuario['nombre'] = decrypt($usuario['nombre']);
$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;
// Preparar datos para la notificación
$datosNotificacion = [
'email' => $usuario['email'],
'nombre' => $usuario['nombre'],
'fecha_hora' => date('Y-m-d H:i:s'),
'ip' => $_SERVER['REMOTE_ADDR'] ?? 'Desconocida',
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? 'Desconocido'
];
// Configuración de correo
$mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | AduanaSoft');
$mail->addAddress($usuario['email']);
$mail->CharSet = 'UTF-8';
$mail->isHTML(true);
$resultadoEnvio = false;
$asunto = "🚫 Cuenta Bloqueada por Seguridad";
$mail->Subject = $asunto;
// Enviar al correo principal
$resultadoPrincipal = enviarEmailCuentaBloqueada(
$usuario['email'],
$usuario['nombre'],
$datosNotificacion
);
$tipoCorreo = $esCorreoAdicional ? "(Correo Adicional)" : "";
if ($resultadoPrincipal) {
$resultadoEnvio = true;
error_log("✅ Notificación de cuenta bloqueada enviada a: {$usuario['email']}");
}
$mail->Body = "
<html>
// Enviar al correo adicional si está configurado
if ($usuario['notificaciones_extra'] == 1 && !empty($usuario['correo_extra'])) {
$resultadoExtra = enviarEmailCuentaBloqueada(
$usuario['correo_extra'],
$usuario['nombre'],
$datosNotificacion,
true // Indicar que es correo adicional
);
if ($resultadoExtra) {
$resultadoEnvio = true;
error_log("✅ Notificación de cuenta bloqueada enviada a correo adicional: {$usuario['correo_extra']}");
}
}
return $resultadoEnvio;
}
/** Función auxiliar para enviar el email físico de cuenta bloqueada **/
function enviarEmailCuentaBloqueada($emailDestino, $nombreUsuario, $datos, $esCorreoAdicional = false)
{
try {
$mail = new PHPMailer(true);
// Configuración de servidor SMTP
$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;
// Configuración del correo
$mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | AduanaSoft');
$mail->addAddress($emailDestino);
$mail->CharSet = 'UTF-8';
$mail->isHTML(true);
$asunto = "🚫 Cuenta Bloqueada por Seguridad";
$mail->Subject = $asunto;
$mail->Body = "
<html>
<head>
<meta charset='UTF-8'>
<title>Alerta de Seguridad</title>
<title>Cuenta Bloqueada</title>
</head>
<body style='font-family: Arial, sans-serif; line-height: 1.6; color: #333;'>
<div style='max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 10px;'>
<div style='text-align: center; margin-bottom: 30px;'>
<h1 style='color: #dc3545; margin: 0;'>🚫 Cuenta Bloqueada</h1>
<p style='color: #666; margin: 5px 0;'>$tipoCorreo</p>
</div>
<hr>
<div style='background-color: #f8f9fa; padding: 20px; border-radius: 8px; margin-bottom: 20px;'>
<p>Hola <b>{$usuario['nombre']}</b>,</p>
<p>Tu cuenta ha sido bloqueada automáticamente tras 5 intentos fallidos al verificar tu código de recuperación.</p>
<p>Por seguridad, deberás contactar a tu agente aduanal para reactivar tu cuenta.</p>
<p>Fecha: <b>" . date('Y-m-d H:i:s') . "</b><br>
IP: <b>" . ($_SERVER['REMOTE_ADDR'] ?? 'Desconocida') . "</b></p>
<h2 style='color: #dc3545; margin-top: 0;'>Cuenta Bloqueada por Seguridad</h2>
<p>Hola <strong>" . htmlspecialchars($nombreUsuario) . "</strong>,</p>
<p>Tu cuenta ha sido <strong>bloqueada automáticamente</strong> tras detectarse múltiples intentos fallidos de verificación del código de recuperación de contraseña.</p>
</div>
<hr>
<div style='background-color: #fff3cd; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #ffc107;'>
<h3 style='color: #856404; margin-top: 0;'>📋 Detalles del Bloqueo:</h3>
<ul style='margin: 10px 0; padding-left: 20px;'>
<li><strong>Fecha y Hora:</strong> " . htmlspecialchars($datos['fecha_hora']) . "</li>
<li><strong>Dirección IP:</strong> " . htmlspecialchars($datos['ip']) . "</li>
<li><strong>Navegador:</strong> " . htmlspecialchars(substr($datos['user_agent'], 0, 100)) . "...</li>
<li><strong>Motivo:</strong> 5 intentos fallidos de verificación de código</li>
</ul>
</div>
<div style='background-color: #d1ecf1; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #bee5eb;'>
<h3 style='color: #0c5460; margin-top: 0;'>🔒 ¿Qué significa esto?</h3>
<ul style='margin: 10px 0; padding-left: 20px;'>
<li>Tu cuenta ha sido <strong>suspendida temporalmente</strong> por seguridad</li>
<li>No podrás acceder al sistema hasta que sea reactivada</li>
<li>Todos los códigos de recuperación han sido invalidados</li>
<li>Este evento ha sido registrado en nuestros logs de seguridad</li>
</ul>
</div>
<div style='background-color: #d4edda; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #c3e6cb;'>
<h3 style='color: #155724; margin-top: 0;'>🔧 ¿Cómo reactivar tu cuenta?</h3>
<p><strong>Deberás contactar a tu agente aduanal</strong> para solicitar la reactivación de tu cuenta.</p>
<p>El agente aduanal podrá:</p>
<ul style='margin: 10px 0; padding-left: 20px;'>
<li>Verificar tu identidad</li>
<li>Reactivar tu cuenta de manera segura</li>
<li>Ayudarte a establecer una nueva contraseña</li>
</ul>
</div>
<div style='background-color: #f8d7da; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #f5c6cb;'>
<h3 style='color: #721c24; margin-top: 0;'>⚠️ ¿No fuiste tú?</h3>
<p>Si <strong>no intentaste recuperar tu contraseña</strong>, esto podría indicar que alguien está tratando de acceder a tu cuenta de manera no autorizada.</p>
<p><strong>Te recomendamos:</strong></p>
<ul style='margin: 10px 0; padding-left: 20px;'>
<li>Contactar inmediatamente a tu agente aduanal</li>
<li>Reportar esta actividad sospechosa</li>
<li>Revisar tus dispositivos en busca de malware</li>
<li>Cambiar las contraseñas de tus otras cuentas importantes</li>
</ul>
</div>
<div style='text-align: center; margin-top: 30px; padding-top: 20px; border-top: 1px solid #eee;'>
<p style='color: #666; font-size: 12px; margin: 0;'>
Esta es una notificación automática de seguridad.<br>
Si tienes preguntas, contacta a nuestro equipo de soporte.
Si tienes preguntas, contacta a tu agente aduanal o a nuestro equipo de soporte.
</p>
</div>
</div>
</body>
</html>";
$mail->send();
error_log("✅ Notificación de cuenta bloqueada enviada a: {$usuario['email']}");
return true;
// Enviar el correo
$mail->send();
return true;
} catch (Exception $e) {
error_log("❌ Error al enviar notificación de cuenta bloqueada: " . $e->getMessage());
return false;
}
}
function cambiarPasswordVista()