Journal des modifications¶
AI-Bridge for Cisco UC — par SARL SOURDEAU CONSULTING
Toutes les modifications notables de ce projet sont documentées dans ce fichier.
[v202604] - 08/04/2026¶
Ajouts¶
Cœur applicatif¶
- Serveur MCP — Serveur FastMCP Streamable HTTP ; configuré via
.envavec options CLI (-ddebug,-haide) ; monte les modulesinfra,commonet les modules produit sous licence - Initialisation au démarrage — génère automatiquement la paire de clés RSA-4096 et le sel serveur au premier lancement ; crée les répertoires clients et émet les tokens JWT ; vérifie la licence au démarrage
- Synchronisation clients — réconcilie
clients/avecAUTH_CLIENTSà chaque démarrage : crée les nouveaux clients, renouvelle les tokens expirés, purge les clients supprimés et leurs données - Endpoints HTTP —
GET /health(liveness + readiness, sans auth),GET /metrics(Prometheus, Bearer),GET /status(vue opérationnelle complète : licence, état des sauvegardes, compteurs par protocole, Bearer) - Métriques & observabilité — fenêtres glissantes 24h thread-safe en mémoire, pics req/min, suivi des clients actifs ; compteurs Prometheus pour les requêtes HTTP et les appels d'outils MCP
- Journalisation structurée —
app.logJSON (rotation) etaudit.logdédié avec formateur clé=valeur→JSON ; sortie console colorée ; niveau et rotation configurables
Sécurité¶
- Modèle de déploiement — air-gapped ou hybride ; aucune dépendance cloud ; fonctionnement entièrement hors ligne
- TLS obligatoire — HTTPS imposé sur tous les modes d'authentification ; auto-signé (généré automatiquement) ou signé par une CA
- Authentification client — tokens bearer RS256 (RSA-4096), émis automatiquement au démarrage ; mode JWT (longue durée) ou OAuth2 Client Credentials (RFC 6749 §4.4 + §2.3.1 ; révocation RFC 7009 ; découverte serveur RFC 8414)
- Autorisation client — RBAC avec profils prédéfinis (
admin,operator,auditor) ; contrôle par outil ; personnalisable par client - Isolation des données client — répertoire dédié par client ; identifiants, tokens et rapports isolés ; données automatiquement purgées lors du décommissionnement
- Chiffrement des identifiants — clé Fernet par client dérivée de l'UUID client + sel serveur (PBKDF2-SHA256, 600 000 itérations) ; identifiants jamais stockés en clair
- Piste d'audit — événements d'audit JSON structurés : AUTH_SUCCESS/AUTH_FAILED (+ IP source), ALLOWED/DENIED, RATE_LIMITED, REJECTED, STORED/UPDATED/DELETED, TRUSTED fingerprint, WRITTEN/EXPORTED, STARTED/STOPPED/FAILED, alertes de sécurité transport ; assainissement des caractères de contrôle pour prévenir l'injection de logs
- Sécurité transport — HTTPS/TLS, protection contre le DNS rebinding, validation des en-têtes Host/Origin/Content-Type
- Vérification d'identité des hôtes — vérification d'empreinte SSH + vérification du certificat HTTPS avant toute connexion Cisco UC
- Validation des entrées — modèles Pydantic sur toutes les entrées d'outils MCP ; assainissement des caractères de contrôle dans le formateur d'audit
- Limitation de débit — fenêtre glissante par client (configurable par catégorie d'outil) ; fail2ban par IP pour la détection de force brute avec seuil configurable et déblocage automatique
- Licences — JWT signé RS256 émis hors ligne par l'éditeur ; liaison hostname optionnelle ; montage conditionnel des modules produit
Système de licences¶
- Système de licences — JWT signé RS256 émis hors ligne par l'éditeur ; états :
VALID/GRACE/EXPIRED/INVALID; liaison hostname optionnelle ; montage conditionnel des modules produit ; durée de grâce signée dans le JWT ; watchdog en arrière-plan avec intervalle de vérification configurable ;scripts/license_checker.pyinspecteur CLI autonome
Sauvegarde & Restauration¶
- Sauvegardes automatisées — archives chiffrées périodiques (RSA-4096 + AES-256-GCM + sidecar SHA-256) ; rétention locale ; export SFTP optionnel avec authentification par clé ou mot de passe ; répertoires exclus configurables ; watchdog daemon
- Script de restauration —
scripts/backup_restore.py: extraction sûre versrestore_*/ou--replaceen place après SIGTERM ; intégrité SHA-256 vérifiée avant déchiffrement - Chiffrement du mot de passe SFTP —
scripts/encrypt_sftp_password.py: chiffrement/déchiffrement Fernet du mot de passe ; mise à jour automatique de.env
Mise à jour¶
- Système de mise à jour —
scripts/upgrade.py: vérification de signature RSA-PSS contre la clé publique de l'éditeur ; plan d'actions fichier par fichier (remplacer/créer/ignorer les chemins protégés) ; fusion des clés.envsans écraser les valeurs client ; prévisualisation--dry-run; sauvegarde automatique pré-mise à jour ; log horodaté dansupgrade/
Rapports¶
- Génération de rapports — outils MCP
write_report,read_report,export_report_pdf; sortie Markdown avec 9 types de graphiques (pie, bar, donut, radar, gauge, treemap, grouped bars, waterfall, severity matrix) ; export PDF via WeasyPrint ; palette de couleurs personnalisable
CUCM¶
- Support CUCM (v14 & v15) — 16 outils via AXL, RisPort70 et SSH OS Admin : gestion des identifiants, téléchargement des schémas AXL, appels AXL/AXL-SQL, requêtes d'enregistrement des appareils (RIS), commandes SSH, diagnostics de connectivité
- Prompt d'audit de sécurité — workflow complet d'audit de sécurité basé sur le Cisco Security Guide Release 15 ; 8 ressources de référence embarquées (guide CLI, chapitres du Security Guide)
Tests & CI¶
- Suite de tests — 839 tests unitaires, 93%+ de couverture de code (seuil de 90% imposé) ; tests d'intégration sur CUCM réel (AXL, RIS, SSH) ; matrice CI sur Python 3.12 + 3.13 en parallèle ; sortie JUnit XML
Dépendances¶
- colorlog==6.10.1
- cryptography==47.0.0
- fastmcp==3.2.4
- lxml==6.1.0
- Markdown==3.10.2
- matplotlib==3.10.9
- numpy==2.4.4
- paramiko==4.0.0
- prometheus_client==0.25.0
- pydantic==2.13.3
- PyJWT==2.12.1
- python-dotenv==1.2.2
- requests==2.33.1
- starlette==1.0.0
- urllib3==2.6.3
- weasyprint==68.1
- zeep==4.3.2
Dépendances (dev)¶
- freezegun==1.5.5
- httpx==0.28.1
- pre-commit==4.6.0
- pymupdf4llm>=0.0.17
- pytest==9.0.3
- pytest-asyncio==1.3.0
- pytest-cov==7.1.0
- ruff==0.15.12