Tul xxx Tul
User / IP
:
216.73.216.217
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
piscina
/
app
/
models
/
Viewing: Usuario.php
<?php namespace App\Models; require_once dirname(__DIR__, 2) . '/config/database.php'; use mysqli; class Usuario { private static ?mysqli $conn = null; public static function autenticar(string $identificador, string $password): array { self::asegurarAdminPorDefecto(); $usuario = self::buscarPorIdentificador($identificador); if (!$usuario) { return ['ok' => false, 'mensaje' => 'Credenciales incorrectas.']; } if (!(bool) $usuario['activo']) { return ['ok' => false, 'mensaje' => 'El usuario está inactivo. Contacta al administrador.']; } if (!password_verify($password, $usuario['password'])) { return ['ok' => false, 'mensaje' => 'Credenciales incorrectas.']; } unset($usuario['password']); return ['ok' => true, 'usuario' => $usuario]; } public static function crear(array $data): int { $conn = self::connection(); $sql = 'INSERT INTO usuarios (nombre, usuario, password, rol, activo) VALUES (?, ?, ?, ?, ?)'; $stmt = $conn->prepare($sql); $passwordHash = password_hash($data['password'], PASSWORD_DEFAULT); $activo = (int) ($data['activo'] ?? 1); $rol = $data['rol'] ?? 'empleado'; $stmt->bind_param('ssssi', $data['nombre'], $data['usuario'], $passwordHash, $rol, $activo); $stmt->execute(); return $stmt->insert_id; } private static function buscarPorIdentificador(string $identificador): ?array { $conn = self::connection(); // 1) Buscar por nombre de usuario directamente $sqlUsuario = 'SELECT id, nombre, usuario, password, rol, activo FROM usuarios WHERE usuario = ? LIMIT 1'; $stmt = $conn->prepare($sqlUsuario); $stmt->bind_param('s', $identificador); $stmt->execute(); $resultado = $stmt->get_result()->fetch_assoc(); if ($resultado) { return $resultado; } // 2) Si no se encontró, buscar por correo del empleado vinculado $sqlCorreo = 'SELECT u.id, u.nombre, u.usuario, u.password, u.rol, u.activo FROM usuarios u INNER JOIN empleados e ON e.usuario_id = u.id WHERE e.correo = ? LIMIT 1'; $stmt2 = $conn->prepare($sqlCorreo); $stmt2->bind_param('s', $identificador); $stmt2->execute(); $resultado2 = $stmt2->get_result()->fetch_assoc(); return $resultado2 ?: null; } public static function existeUsuario(string $usuario, ?int $exceptId = null): bool { $conn = self::connection(); if ($exceptId) { $sql = 'SELECT 1 FROM usuarios WHERE usuario = ? AND id <> ? LIMIT 1'; $stmt = $conn->prepare($sql); $stmt->bind_param('si', $usuario, $exceptId); } else { $sql = 'SELECT 1 FROM usuarios WHERE usuario = ? LIMIT 1'; $stmt = $conn->prepare($sql); $stmt->bind_param('s', $usuario); } $stmt->execute(); $res = $stmt->get_result(); return (bool) ($res && $res->fetch_row()); } public static function actualizar(int $id, array $data): bool { $conn = self::connection(); $campos = []; $tipos = ''; $params = []; if (isset($data['nombre'])) { $campos[] = 'nombre = ?'; $tipos .= 's'; $params[] = $data['nombre']; } if (isset($data['usuario'])) { $campos[] = 'usuario = ?'; $tipos .= 's'; $params[] = $data['usuario']; } if (isset($data['password']) && $data['password'] !== '') { $campos[] = 'password = ?'; $tipos .= 's'; $params[] = password_hash($data['password'], PASSWORD_DEFAULT); } if (isset($data['rol'])) { $campos[] = 'rol = ?'; $tipos .= 's'; $params[] = $data['rol']; } if (isset($data['activo'])) { $campos[] = 'activo = ?'; $tipos .= 'i'; $params[] = (int) $data['activo']; } if (empty($campos)) { return true; } $tipos .= 'i'; $params[] = $id; $sql = 'UPDATE usuarios SET ' . implode(', ', $campos) . ' WHERE id = ?'; $stmt = $conn->prepare($sql); $stmt->bind_param($tipos, ...$params); $stmt->execute(); return $stmt->affected_rows >= 0; } private static function asegurarAdminPorDefecto(): void { $conn = self::connection(); $resultado = $conn->query('SELECT COUNT(*) AS total FROM usuarios'); $total = (int) ($resultado?->fetch_assoc()['total'] ?? 0); if ($total > 0) { return; } $sql = 'INSERT INTO usuarios (nombre, usuario, password, rol, activo) VALUES ("Administrador", "admin", ?, "admin", 1)'; $stmt = $conn->prepare($sql); $password = password_hash('admin123', PASSWORD_DEFAULT); $stmt->bind_param('s', $password); $stmt->execute(); } private static function connection(): mysqli { if (self::$conn instanceof mysqli) { return self::$conn; } $db = new \Database(); self::$conn = $db->getConnection(); return self::$conn; } }
Coded With 💗 by
0x6ick