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
+
+
+
+
+
+
+
+
+
+
+
\ 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
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file