false, 'message' => 'Error fatal: ' . $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine() ]); exit; }); chdir(__DIR__); require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/src/IpSearchService.php'; use Ubnt\UcrmPluginSdk\Service\PluginLogManager; use Ubnt\UcrmPluginSdk\Service\PluginConfigManager; use SiipAvailableIps\IpSearchService; // Get UCRM log manager $log = PluginLogManager::create(); // Log TODAS las peticiones $log->appendLog('=== NUEVA PETICIÓN ===' ); $log->appendLog('Método: ' . $_SERVER['REQUEST_METHOD']); $log->appendLog('POST data: ' . json_encode($_POST)); $log->appendLog('GET data: ' . json_encode($_GET)); $log->appendLog('Content-Type: ' . ($_SERVER['CONTENT_TYPE'] ?? 'no definido')); $log->appendLog('User Agent: ' . ($_SERVER['HTTP_USER_AGENT'] ?? 'no definido')); // Manejar peticiones AJAX if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'search') { $log->appendLog('>>> Entrando al handler de búsqueda AJAX'); try { // Obtener configuración del plugin desde data/config.json $configManager = PluginConfigManager::create(); $config = $configManager->loadConfig(); $log->appendLog('Configuración cargada: ' . json_encode([ 'ipserver' => $config['ipserver'] ?? 'NO CONFIGURADO', 'hasUnmsToken' => !empty($config['unmsApiToken']), 'hasApiToken' => !empty($config['apitoken']) ])); // Validar que exista la configuración necesaria if (empty($config['ipserver'])) { $log->appendLog('ERROR: No se ha configurado ipserver'); header('Content-Type: application/json'); echo json_encode([ 'success' => false, 'message' => 'El plugin no está configurado correctamente. Falta la dirección del servidor.' ]); exit; } if (empty($config['unmsApiToken'])) { $log->appendLog('ERROR: No se ha configurado unmsApiToken'); header('Content-Type: application/json'); echo json_encode([ 'success' => false, 'message' => 'El plugin no está configurado correctamente. Falta el token de API de UNMS.' ]); exit; } $segmento = $_POST['segment'] ?? ''; $log->appendLog("Buscando IPs en segmento: $segmento"); // URL de la API de UISP - Usar HTTPS $apiUrl = "https://{$config['ipserver']}/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true"; $apiToken = $config['unmsApiToken']; $log->appendLog("URL de API: $apiUrl"); // Crear instancia del servicio y buscar IPs $ipService = new IpSearchService($apiUrl, $apiToken, $log); $resultado = $ipService->buscarIpsDisponibles($segmento); $log->appendLog('Resultado de búsqueda: ' . json_encode([ 'success' => $resultado['success'], 'ipsDisponibles' => count($resultado['data'] ?? []), 'ipsEnUso' => count($resultado['used'] ?? []) ])); header('Content-Type: application/json'); echo json_encode($resultado); } catch (Exception $e) { $log->appendLog('EXCEPCIÓN en búsqueda de IPs: ' . $e->getMessage() . ' | Trace: ' . $e->getTraceAsString()); header('Content-Type: application/json'); echo json_encode([ 'success' => false, 'message' => 'Error al procesar la solicitud: ' . $e->getMessage(), 'error_file' => $e->getFile(), 'error_line' => $e->getLine() ]); } catch (Error $e) { $log->appendLog('ERROR FATAL en búsqueda de IPs: ' . $e->getMessage() . ' | Trace: ' . $e->getTraceAsString()); header('Content-Type: application/json'); echo json_encode([ 'success' => false, 'message' => 'Error fatal: ' . $e->getMessage(), 'error_file' => $e->getFile(), 'error_line' => $e->getLine() ]); } $log->appendLog('<<< Finalizando handler de búsqueda AJAX'); exit; } else if ($_SERVER['REQUEST_METHOD'] === 'POST') { $log->appendLog('Petición POST recibida pero sin action=search o action no válida'); $log->appendLog('Action recibida: ' . ($_POST['action'] ?? 'NO DEFINIDA')); } // Log de acceso público $log->appendLog('Acceso a la interfaz pública de búsqueda de IPs'); ?> Buscador de IPs Disponibles - SIIP

Buscador de IPs Disponibles

Sistema de gestión de direcciones IP para UISP

172.16.

Consultando IPs disponibles...

0
IPs Disponibles
0
IPs en Uso
-
Segmento
# Dirección IP Acción