Aller au contenu

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 .env avec options CLI (-d debug, -h aide) ; monte les modules infra, common et 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/ avec AUTH_CLIENTS à chaque démarrage : crée les nouveaux clients, renouvelle les tokens expirés, purge les clients supprimés et leurs données
  • Endpoints HTTPGET /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éeapp.log JSON (rotation) et audit.log dé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.py inspecteur 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 restaurationscripts/backup_restore.py : extraction sûre vers restore_*/ ou --replace en place après SIGTERM ; intégrité SHA-256 vérifiée avant déchiffrement
  • Chiffrement du mot de passe SFTPscripts/encrypt_sftp_password.py : chiffrement/déchiffrement Fernet du mot de passe ; mise à jour automatique de .env

Mise à jour

  • Système de mise à jourscripts/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 .env sans écraser les valeurs client ; prévisualisation --dry-run ; sauvegarde automatique pré-mise à jour ; log horodaté dans upgrade/

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