diff --git a/captcha.php b/captcha.php new file mode 100644 index 0000000..bd33619 --- /dev/null +++ b/captcha.php @@ -0,0 +1,27 @@ + diff --git a/login.php b/login.php new file mode 100644 index 0000000..5de3d87 --- /dev/null +++ b/login.php @@ -0,0 +1,178 @@ +prepare("SELECT id_usuario, nombre, password, rol FROM usuarios WHERE email = ?"); + $stmt->bind_param("s", $email); + $stmt->execute(); + $result = $stmt->get_result(); + + if ($result->num_rows == 1) { + $usuario = $result->fetch_assoc(); + + // Validamos contraseña hash + if (password_verify($password, $usuario['password'])) { + $_SESSION['id_usuario'] = $usuario['id_usuario']; + $_SESSION['usuario'] = $usuario['nombre']; + $_SESSION['rol'] = $usuario['rol']; + + escribir_log("Login exitoso: " . $usuario['nombre'] . " (Rol: " . $usuario['rol'] . ")"); // <--- LOG + + // Redirección inteligente según el Rol + if ($_SESSION['rol'] === 'admin') { + // Si es el dueño, directo a la cocina y estadísticas + header("Location: admin/dashboard.php"); + } else { + // Si es un cliente de Paraná, directo a que compre algo rico + header("Location: index.php"); + } + exit(); + } else { + escribir_log("Contraseña incorrecta: Intento fallido para el email $email"); // <--- LOG + header("Location: login.php?error=password"); + exit(); + } + } else { + escribir_log("Usuario inexistente: Intento de login con email no registrado: $email"); // <--- LOG + header("Location: login.php?error=user"); + exit(); + } +} +?> + + + + + Login - La Pecosa + + + + + +
+

Login

+ +
+ +
+ + + +
+ ¿Olvidaste tu contraseña? +
+ +
+
+ + +
+ + +
+ + + ¿No tenés cuenta? Registrate gratis + +
+ + + + + \ No newline at end of file diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..a416971 --- /dev/null +++ b/logout.php @@ -0,0 +1,13 @@ + diff --git a/recuperar_contraseña.php b/recuperar_contraseña.php new file mode 100644 index 0000000..3927e52 --- /dev/null +++ b/recuperar_contraseña.php @@ -0,0 +1,167 @@ +prepare("SELECT id_usuario FROM usuarios WHERE email = ?"); + $stmt->bind_param("s", $email); + $stmt->execute(); + + if ($stmt->get_result()->num_rows > 0) { + $codigo = rand(100000, 999999); + $update = $conexion->prepare("UPDATE usuarios SET reset_codigo = ?, reset_expiracion = DATE_ADD(NOW(), INTERVAL 15 MINUTE) WHERE email = ?"); + $update->bind_param("is", $codigo, $email); + + if ($update->execute()) { + $apiKey = RESEND_API_KEY; + $datos_mail = [ + "from" => "La Pecosa ", + "to" => [$email], + "subject" => "Código de Recuperación - La Pecosa", + "html" => " +
+

Hola!

+

Solicitaste restablecer tu contraseña en La Pecosa.

+

$codigo

+

Este código vence en 15 minutos.

+
" + ]; + + $ch = curl_init('https://api.resend.com/emails'); + curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $apiKey, 'Content-Type: application/json']); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($datos_mail)); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $respuesta = curl_exec($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($http_code == 200 || $http_code == 201) { + $_SESSION['email_recuperacion'] = $email; + $tipo_mensaje = "exito"; + $mensaje = "¡Código enviado! Revisá tu casilla de correo."; + $paso = 2; + escribir_log("Recuperación: Código enviado correctamente a $email"); + } else { + $tipo_mensaje = "error"; + $mensaje = "Error al enviar el mail."; + escribir_log("Error mail: Falló Resend para $email (HTTP $http_code)"); + } + } + } else { + escribir_log("Alerta: Intento de recuperación para email NO registrado: $email"); + $tipo_mensaje = "exito"; + $mensaje = "Si el correo es correcto, recibirás un código."; + } + } + + if (isset($_POST['btn_paso2'])) { + $codigo_ingresado = $_POST['codigo']; + $email = $_SESSION['email_recuperacion']; + $stmt = $conexion->prepare("SELECT id_usuario FROM usuarios WHERE email = ? AND reset_codigo = ? AND reset_expiracion > NOW()"); + $stmt->bind_param("si", $email, $codigo_ingresado); + $stmt->execute(); + + if ($stmt->get_result()->num_rows > 0) { + $_SESSION['codigo_verificado'] = true; + $paso = 3; + escribir_log("Recuperación: Código verificado con éxito para $email"); + } else { + $tipo_mensaje = "error"; + $mensaje = "Código incorrecto o expirado."; + escribir_log("Alerta: Código INCORRECTO ingresado para $email"); + } + } + + if (isset($_POST['btn_paso3'])) { + $pass = $_POST['password']; + $confirm = $_POST['confirm_password']; + $email = $_SESSION['email_recuperacion']; + + if ($pass === $confirm) { + $password_hash = password_hash($pass, PASSWORD_BCRYPT); + $update = $conexion->prepare("UPDATE usuarios SET password = ?, reset_codigo = NULL, reset_expiracion = NULL WHERE email = ?"); + $update->bind_param("ss", $password_hash, $email); + + if ($update->execute()) { + escribir_log("Recuperación exitosa: Contraseña actualizada para $email"); + session_destroy(); + header("Location: login.php?mensaje=actualizada"); + exit(); + } + } else { + $tipo_mensaje = "error"; + $mensaje = "Las contraseñas no coinciden."; + } + } +} +?> + + + + + + Recuperar Contraseña - La Pecosa + + + + + +
+ +
+ + + +

Olvidé mi clave

+
+ + +
+ + +

Verificar Código

+

Ingresá el código enviado a tu mail.

+
+ + +
+ + +

Nueva Contraseña

+
+ + + +
+ + + Volver al inicio +
+ + + \ No newline at end of file diff --git a/registro.php b/registro.php new file mode 100644 index 0000000..65ce367 --- /dev/null +++ b/registro.php @@ -0,0 +1,230 @@ +prepare("SELECT id_usuario FROM usuarios WHERE email = ?"); + $checkEmail->bind_param("s", $email); + $checkEmail->execute(); + $res = $checkEmail->get_result(); + + if ($res->num_rows > 0) { + $tipo_mensaje = "error"; + $mensaje = "El email ya está registrado."; + escribir_log("Intento de registro duplicado: El email $email ya existe."); + } else { + // 4. Encriptamos y guardamos + $password_hash = password_hash($password, PASSWORD_BCRYPT); + + $stmt = $conexion->prepare("INSERT INTO usuarios (nombre, email, password, rol) VALUES (?, ?, ?, ?)"); + $stmt->bind_param("ssss", $nombre, $email, $password_hash, $rol); + + if ($stmt->execute()) { + $tipo_mensaje = "exito"; + $mensaje = "¡Registro exitoso! Ya podés iniciar sesión."; + escribir_log("Nuevo usuario: $nombre ha creado una cuenta ($email)."); + } else { + $tipo_mensaje = "error"; + $mensaje = "Error al registrar: " . $conexion->error; + escribir_log("Error crítico de registro " . $conexion->error); + } + } + } +} +?> + + + + + + Registro - La Pecosa + + + + + +
+

Crear Cuenta

+ + +
+ +
+ + +
+ + + + + + +
+ + +
+ + +
+ + +
+ + + + + \ No newline at end of file