Files
whatsapp/config/config.php
T
2025-11-18 20:26:36 -05:00

211 lines
6.5 KiB
PHP

<?php
/**
* Configuración del sistema WhatsApp Bot Manager
* Desarrollado por U-Site.app
* Fecha: 13 de noviembre de 2025
*/
// Configuración de la base de datos (compatible con cPanel)
define('DB_HOST', 'localhost');
define('DB_PORT', '3306');
define('DB_NAME', 'whatsapp_bot');
define('DB_USER', 'whatsapp_user');
define('DB_PASS', ''); // Se generará automáticamente en la instalación
define('DB_CHARSET', 'utf8mb4');
// WhatsApp Business API (se configurará después de la instalación)
define('WHATSAPP_TOKEN', 'TU_TOKEN_DE_WHATSAPP_AQUI');
define('WHATSAPP_PHONE_NUMBER_ID', 'TU_PHONE_ID_AQUI');
define('WHATSAPP_API_URL', 'https://graph.facebook.com/v22.0/');
define('WEBHOOK_VERIFY_TOKEN', 'mi_token_secreto_123');
// Configuración general
define('APP_NAME', 'WhatsApp Bot System');
define('APP_VERSION', '1.0.0');
define('APP_URL', 'https://tudominio.com'); // Se auto-detectará
define('TIMEZONE', 'America/Bogota');
// Información del desarrollador
define('DEVELOPER_NAME', 'U-Site.app');
define('DEVELOPER_URL', 'https://u-site.app');
define('DEVELOPER_EMAIL', 'support@u-site.app');
define('DEVELOPER_SUPPORT', 'https://u-site.app/support');
// Configuración de seguridad
define('INSTALLATION_LOCK', '.installation_completed'); // Archivo de bloqueo
define('ADMIN_USERNAME', 'admin'); // Usuario administrador por defecto
define('ADMIN_PASSWORD', ''); // Se configurará en instalación
define('SESSION_TIMEOUT', 1800); // 30 minutos
define('MAX_LOGIN_ATTEMPTS', 3); // Intentos máximos de login
define('LOGIN_LOCKOUT_TIME', 900); // 15 minutos de bloqueo tras fallos
// Configuración de logs
define('ENABLE_LOGGING', true);
define('LOG_LEVEL', 'INFO'); // DEBUG, INFO, WARNING, ERROR
define('LOG_FILE', 'logs/system.log');
// Configuración de archivos
define('UPLOAD_MAX_SIZE', 10485760); // 10MB
define('ALLOWED_FILE_TYPES', ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx']);
// Configurar zona horaria
date_default_timezone_set(TIMEZONE);
// Configurar errores para desarrollo (se desactivará en producción)
if (!file_exists(dirname(__DIR__) . '/' . 'installation_completed')) {
error_reporting(E_ALL);
ini_set('display_errors', 1);
} else {
error_reporting(0);
ini_set('display_errors', 0);
}
ini_set('log_errors', 1);
// Headers de seguridad
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: SAMEORIGIN');
header('X-XSS-Protection: 1; mode=block');
// Auto-detectar URL base si no está configurada
if (!defined('AUTO_DETECTED_URL')) {
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://';
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
$path = dirname($_SERVER['SCRIPT_NAME'] ?? '');
define('AUTO_DETECTED_URL', $protocol . $host . $path);
}
// Función para verificar si la instalación está completada
function isInstallationCompleted() {
return file_exists(dirname(__DIR__) . '/.installation_completed');
}
// Función para verificar login
function isUserLoggedIn() {
return isset($_SESSION['admin_logged_in']) && $_SESSION['admin_logged_in'] === true;
}
// Función para verificar intentos de login
function checkLoginAttempts($ip) {
$attemptsFile = dirname(__DIR__) . '/.login_attempts.json';
if (!file_exists($attemptsFile)) {
return true;
}
$attempts = json_decode(file_get_contents($attemptsFile), true);
if (!isset($attempts[$ip])) {
return true;
}
$ipData = $attempts[$ip];
if (time() > $ipData['locked_until']) {
unset($attempts[$ip]);
file_put_contents($attemptsFile, json_encode($attempts));
return true;
}
return $ipData['attempts'] < MAX_LOGIN_ATTEMPTS;
}
// Función para registrar intento de login fallido
function recordFailedLogin($ip) {
$attemptsFile = dirname(__DIR__) . '/.login_attempts.json';
$attempts = [];
if (file_exists($attemptsFile)) {
$attempts = json_decode(file_get_contents($attemptsFile), true);
}
if (!isset($attempts[$ip])) {
$attempts[$ip] = ['attempts' => 0, 'locked_until' => 0];
}
$attempts[$ip]['attempts']++;
if ($attempts[$ip]['attempts'] >= MAX_LOGIN_ATTEMPTS) {
$attempts[$ip]['locked_until'] = time() + LOGIN_LOCKOUT_TIME;
}
file_put_contents($attemptsFile, json_encode($attempts));
}
// Función para limpiar intentos de login exitoso
function clearLoginAttempts($ip) {
$attemptsFile = dirname(__DIR__) . '/.login_attempts.json';
if (file_exists($attemptsFile)) {
$attempts = json_decode(file_get_contents($attemptsFile), true);
unset($attempts[$ip]);
file_put_contents($attemptsFile, json_encode($attempts));
}
}
// Autoloader
spl_autoload_register(function ($class) {
$directories = [
dirname(__DIR__) . '/classes/',
dirname(__DIR__) . '/services/',
dirname(__DIR__) . '/controllers/'
];
foreach ($directories as $directory) {
$file = $directory . $class . '.php';
if (file_exists($file)) {
require_once $file;
return;
}
}
});
// Función para obtener configuración desde base de datos
function getConfigFromDB($key, $default = null) {
static $configs = null;
if ($configs === null && isInstallationCompleted()) {
try {
$pdo = new PDO(
"mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET,
DB_USER,
DB_PASS,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]
);
$stmt = $pdo->query("SELECT config_key, config_value FROM system_config");
$configs = [];
while ($row = $stmt->fetch()) {
$configs[$row['config_key']] = $row['config_value'];
}
} catch (PDOException $e) {
error_log("Error loading config: " . $e->getMessage());
$configs = [];
}
}
return $configs[$key] ?? $default;
}
// Inicializar sesión si no está activa
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// Verificar timeout de sesión
if (isUserLoggedIn() && isset($_SESSION['last_activity'])) {
if (time() - $_SESSION['last_activity'] > SESSION_TIMEOUT) {
session_destroy();
session_start();
}
}
// Actualizar última actividad
if (isUserLoggedIn()) {
$_SESSION['last_activity'] = time();
}
?>