'api_dispositivos.php', 'add_dispositivo' => 'api_dispositivos.php', 'update_dispositivo' => 'api_dispositivos.php', 'delete_dispositivo' => 'api_dispositivos.php', 'edit_dispositivo' => 'api_dispositivos.php', // Sectores (consolidado) 'get_sectores' => 'api_sectores.php', 'add_sector' => 'api_sectores.php', 'update_sector' => 'api_sectores.php', 'delete_sector' => 'api_sectores.php', // Puertos (consolidado) 'get_puertos' => 'api_puertos.php', 'update_puertos' => 'api_puertos.php', 'asignar_puertos' => 'api_puertos.php', // Reglas de automatización 'get_reglas' => 'api_reglas.php', 'save_reglas' => 'api_reglas.php', 'delete_regla' => 'api_reglas.php', 'toggle_regla' => 'api_reglas.php', // Otros 'add_entidad' => 'add_entidad.php', 'mqtt_publish' => 'mqtt_publish.php', 'mqtt_config' => 'mqtt_config.php', 'login' => 'login.php', 'logout' => 'logout.php', 'me' => 'me.php', 'estado' => 'estado.php' ]; if (!isset($map[$route])) { require_once __DIR__ . '/bootstrap.php'; json_error('Ruta no encontrada', 404); } require_once __DIR__ . '/bootstrap.php'; $whitelist = ['login', 'estado']; if (!in_array($route, $whitelist, true)) { if (session_status() !== PHP_SESSION_ACTIVE) { session_start(); } if (empty($_SESSION['user'])) { json_error('No autenticado', 401); } } $target = __DIR__ . '/' . $map[$route]; if (!file_exists($target)) { json_error('Handler no disponible', 500); } // Incluir el handler seleccionado require $target;