From 8c2079323670f32c0abdf739bd3b3e67e77dd53a Mon Sep 17 00:00:00 2001 From: Guillaume DENIS Date: Wed, 8 Jul 2026 07:39:33 +0200 Subject: [PATCH] refactor(switch-config): charger la base VLAN depuis l'API CMDB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - loadVlanDatabase() interroge GET /api/vlans (table networks de la CMDB) au lieu du fichier vlan_database.js, désormais supprimé - Repli sur la base par défaut intégrée en mode file:// ou serveur injoignable - Lien vers le générateur de mots de passe dans la navigation Co-Authored-By: Claude Opus 4.8 --- .gitmodules | 2 +- switch-config/switch_vlan_mapper.html | 72 +++++++++++---------------- switch-config/vlan_database.js | 11 ---- 3 files changed, 30 insertions(+), 55 deletions(-) delete mode 100644 switch-config/vlan_database.js diff --git a/.gitmodules b/.gitmodules index 1838380..b53d0d8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "cmdb"] path = cmdb - url = ssh://git@git.thehackdes.com/TheHackdes/Noctame.git + url = https://git.thehackdes.com/TheHackdes/Noctame.git branch = dev diff --git a/switch-config/switch_vlan_mapper.html b/switch-config/switch_vlan_mapper.html index 999d3e7..7083125 100644 --- a/switch-config/switch_vlan_mapper.html +++ b/switch-config/switch_vlan_mapper.html @@ -596,7 +596,6 @@ button:active { transform: scale(0.98); } background: #101216; color: #d4d4d4; } - @@ -608,6 +607,7 @@ button:active { transform: scale(0.98); }
CMDBMachines, réseaux, salles
🔐
Générateur certificatsClés RSA, CSR, SSL
🔌
Configuration switchVLANs, export config
+
🔑
Mots de passeGénérateur & envoi
PréférencesTypes, tickets, réglages
@@ -810,51 +810,35 @@ const DEFAULT_VLAN_DATABASE = `1 = Native = #8B5CF6 200 = VLAN200 = #16A34A 300 = VLAN300 = #0EA5E9`; -// Charger la base de données VLAN au démarrage -function loadVlanDatabase() { - // 1️⃣ Chercher d'abord dans localStorage (changements sauvegardés par l'utilisateur) - const savedDbText = localStorage.getItem('vlanDatabaseText'); - if (savedDbText) { - parseVlanDatabase(savedDbText); - console.log('✓ Base de données chargée depuis le stockage local'); - return; - } - - // 2️⃣ Vérifier si vlan_database.js a été chargé (fonctionne en mode file://) - if (typeof VLAN_DATABASE_FILE !== 'undefined') { - parseVlanDatabase(VLAN_DATABASE_FILE); - localStorage.setItem('vlanDatabaseText', VLAN_DATABASE_FILE); - console.log('✓ Base de données chargée depuis vlan_database.js'); - return; - } - - // 3️⃣ Essayer de charger depuis le fichier externe (serveur HTTP uniquement) +// Charger la base de données VLAN au démarrage. +// Source de vérité : la table `networks` de la CMDB (SQL), exposée par le +// portail via GET /api/vlans. Chaque réseau CMDB portant un numéro de VLAN +// devient une entrée (nom + couleur). Remplace l'ancien vlan_database.js. +// Replis (mode file:// ou serveur injoignable) : base par défaut intégrée. +async function loadVlanDatabase() { if (!location.href.startsWith('file://')) { - const xhr = new XMLHttpRequest(); - xhr.open('GET', 'vlan_database.txt', true); - xhr.onload = function() { - if (xhr.status === 200) { - parseVlanDatabase(xhr.responseText); - localStorage.setItem('vlanDatabaseText', xhr.responseText); - console.log('✓ Base de données chargée depuis vlan_database.txt'); - } else { - loadDefaultDatabase(); - } - }; - xhr.onerror = function() { - loadDefaultDatabase(); - }; - try { - xhr.send(); - return; + const res = await fetch('/api/vlans', { cache: 'no-store' }); + if (res.ok) { + const rows = await res.json(); + vlanDatabase = {}; + rows.forEach(r => { + if (r.vlan === null || r.vlan === undefined || r.vlan === '') return; + vlanDatabase[String(r.vlan)] = { + name: r.name || `VLAN_${r.vlan}`, + color: r.color || '#8B5CF6' + }; + }); + console.log(`✓ ${Object.keys(vlanDatabase).length} VLAN(s) chargés depuis la CMDB (table networks)`); + return; + } + console.warn('CMDB /api/vlans a répondu', res.status, '→ base VLAN par défaut'); } catch (error) { - loadDefaultDatabase(); + console.warn('CMDB injoignable, base VLAN par défaut :', error); } - } else { - // Mode file:// et aucun vlan_database.js trouvé - utiliser DB par défaut - loadDefaultDatabase(); } + // Mode file:// ou serveur indisponible : base par défaut intégrée + loadDefaultDatabase(); } function loadDefaultDatabase() { @@ -2475,8 +2459,10 @@ window.addEventListener('resize', () => { }); // Charger la base de données au démarrage -window.addEventListener('load', () => { - loadVlanDatabase(); +window.addEventListener('load', async () => { + // Attendre les VLANs (table networks CMDB) avant toute analyse : une conf + // reçue via le hash s'analyse aussitôt et a besoin des noms/couleurs. + await loadVlanDatabase(); syncCmdbDbStatus(); // version de la base CMDB (partagée via localStorage) // Config transmise par la CMDB via l'URL (#cfg=...) : pré-remplir et analyser diff --git a/switch-config/vlan_database.js b/switch-config/vlan_database.js deleted file mode 100644 index 0c72c3b..0000000 --- a/switch-config/vlan_database.js +++ /dev/null @@ -1,11 +0,0 @@ -// Fichier de base de données VLAN - À charger dans le HTML -// Placer ce fichier dans le même dossier que switch_vlan_mapper.html -// Format : = = (exemple générique, à adapter) - -const VLAN_DATABASE_FILE = `10 = MGMT = #6366f1 -20 = SERVERS = #22c55e -30 = USERS = #06b6d4 -40 = VOICE = #2dd4bf -50 = DMZ = #8b5cf6 -99 = GUEST = #f97316 -`;