Parámetro dos factores

This commit is contained in:
2025-05-26 15:56:41 -06:00
parent 738c9b07df
commit f611c35b49
5 changed files with 261 additions and 60 deletions

View File

@@ -6,14 +6,14 @@ require_once __DIR__ . '/../helpers/crypto.php';
function index()
{
// Asegúrate de tener conexión
$conn = getConnection(); // Suponiendo que tienes una función getConnection()
$conn = getConnection();
// Verifica si la sesión tiene el id_usuario
if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? true)) {
// CORRIGIDO: Cambiar id_usuario por usuario_id (consistente con login.php)
if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
die("Usuario no autenticado.");
}
$id_usuario = $_SESSION['usuario_id'];
$id_usuario = $_SESSION['usuario_id']; // CORRIGIDO
// Obtener correos
$correos = obtenerCorreos($conn, $id_usuario);
@@ -27,14 +27,94 @@ function opciones()
include __DIR__ . '/../../views/seguridad/agregar.php';
}
function correoExtra()
// Función para obtener el estado actual (para mostrar en la vista)
function obtenerEstadoDosFactores()
{
if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? true)) {
echo "Error: no se ha iniciado sesión o falta el ID de usuario.";
$conn = getConnection();
// CORRIGIDO: Cambiar id_usuario por usuario_id
$id_usuario = $_SESSION['usuario_id'] ?? null;
if (!$id_usuario) {
return 0; // valor por defecto si no hay sesión
}
$sql_dos_factores = "SELECT dos_factores FROM usuarios_sistema WHERE id_usuario = ?";
$params = [$id_usuario];
$stmt_dos_factores = sqlsrv_prepare($conn, $sql_dos_factores, $params);
$dos_factores_estado = 0; // valor por defecto
if ($stmt_dos_factores && sqlsrv_execute($stmt_dos_factores)) {
if ($row = sqlsrv_fetch_array($stmt_dos_factores, SQLSRV_FETCH_ASSOC)) {
$dos_factores_estado = (int)$row['dos_factores'];
}
}
sqlsrv_free_stmt($stmt_dos_factores);
sqlsrv_close($conn);
return $dos_factores_estado;
}
// Función para actualizar el estado (cuando se envía el formulario)
function autenticacionDosFactores()
{
// Solo ejecutar si es una petición POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: /IMPORTADORES/seguridad/index');
exit;
}
$id_usuario = $_SESSION['usuario_id'];
$conn = getConnection();
// CORRIGIDO: Cambiar id_usuario por usuario_id
$id_usuario = $_SESSION['usuario_id'] ?? null;
if (!$id_usuario) {
die("No autorizado - Sesión inválida");
}
// CORRIGIDO: Verificar también que no esté pendiente de confirmación
if ($_SESSION['pendiente_confirmacion'] ?? false) {
die("No autorizado - Confirmación pendiente");
}
$dos_factores = isset($_POST['dos_factores']) ? 1 : 0;
$sql = "UPDATE usuarios_sistema SET dos_factores = ? WHERE id_usuario = ?";
$params = [$dos_factores, $id_usuario];
$stmt = sqlsrv_prepare($conn, $sql, $params);
if (!$stmt) {
die("Error en la preparación: " . print_r(sqlsrv_errors(), true));
}
$result = sqlsrv_execute($stmt);
if ($result === false) {
die("Error al actualizar: " . print_r(sqlsrv_errors(), true));
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
// MEJORADO: Agregar mensaje de éxito
$_SESSION['config_success'] = $dos_factores ?
'Autenticación de dos factores activada correctamente.' :
'Autenticación de dos factores desactivada correctamente.';
header('Location: /IMPORTADORES/seguridad/index');
exit;
}
function correoExtra()
{
// CORRIGIDO: Cambiar id_usuario por usuario_id y verificar confirmación
if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
echo "Error: no se ha iniciado sesión o sesión incompleta.";
exit;
}
$id_usuario = $_SESSION['usuario_id']; // CORRIGIDO
$conn = getConnection();
$sql_check = "SELECT COUNT(*) AS total FROM correo_extra WHERE id_usuario = ?";
@@ -57,6 +137,7 @@ function correoExtra()
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario, $correo]);
if ($stmt && sqlsrv_execute($stmt)) {
$_SESSION['config_success'] = 'Correo adicional registrado correctamente.';
header('Location: /IMPORTADORES/seguridad/index');
exit;
} else {
@@ -66,12 +147,13 @@ function correoExtra()
function correoRespaldo()
{
if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? true)) {
echo "Error: no se ha iniciado sesión o falta el ID de usuario.";
// CORRIGIDO: Cambiar id_usuario por usuario_id y verificar confirmación
if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
echo "Error: no se ha iniciado sesión o sesión incompleta.";
exit;
}
$id_usuario = $_SESSION['usuario_id'];
$id_usuario = $_SESSION['usuario_id']; // CORRIGIDO
$conn = getConnection();
$sql_check = "SELECT COUNT(*) AS total FROM correo_respaldo WHERE id_usuario = ?";
@@ -79,7 +161,7 @@ function correoRespaldo()
$row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);
if ($row['total'] > 0) {
echo "Ya tienes un correo adicional registrado.";
echo "Ya tienes un correo de respaldo registrado.";
return;
}
@@ -94,23 +176,35 @@ function correoRespaldo()
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario, $correo]);
if ($stmt && sqlsrv_execute($stmt)) {
$_SESSION['config_success'] = 'Correo de respaldo registrado correctamente.';
header('Location: /IMPORTADORES/seguridad/index');
exit;
} else {
echo "Error al registrar el correo extra.";
echo "Error al registrar el correo de respaldo.";
}
}
function obtenerCorreos($conn, $id_usuario)
{
$correos = [
'dos_factores' => 0,
'correo_extra' => '',
'correo_respaldo' => ''
];
// Obtener estado dos_factores
$sql_dos_factores = "SELECT dos_factores FROM usuarios_sistema WHERE id_usuario = ?";
$params = [$id_usuario];
$stmt_dos_factores = sqlsrv_prepare($conn, $sql_dos_factores, $params);
if ($stmt_dos_factores && sqlsrv_execute($stmt_dos_factores)) {
if ($row = sqlsrv_fetch_array($stmt_dos_factores, SQLSRV_FETCH_ASSOC)) {
$correos['dos_factores'] = (int)$row['dos_factores']; // MEJORADO: Cast a int
}
}
// Obtener correo_extra
$sql_extra = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
$stmt_extra = sqlsrv_prepare($conn, $sql_extra, [$id_usuario]);
$stmt_extra = sqlsrv_prepare($conn, $sql_extra, $params);
if ($stmt_extra && sqlsrv_execute($stmt_extra)) {
if ($row = sqlsrv_fetch_array($stmt_extra, SQLSRV_FETCH_ASSOC)) {
$correos['correo_extra'] = $row['correo'];
@@ -119,7 +213,7 @@ function obtenerCorreos($conn, $id_usuario)
// Obtener correo_respaldo
$sql_respaldo = "SELECT correo FROM correo_respaldo WHERE id_usuario = ?";
$stmt_respaldo = sqlsrv_prepare($conn, $sql_respaldo, [$id_usuario]);
$stmt_respaldo = sqlsrv_prepare($conn, $sql_respaldo, $params);
if ($stmt_respaldo && sqlsrv_execute($stmt_respaldo)) {
if ($row = sqlsrv_fetch_array($stmt_respaldo, SQLSRV_FETCH_ASSOC)) {
$correos['correo_respaldo'] = $row['correo'];