[[./accueil| ↩ Retour à l'accueil du projet]]
====== 4) Le Menu Principal (Gestionnaire CLI) ======

Ce document définit l'organisation, l'arborescence et le comportement attendu de l'interface textuelle interactive (CLI) centrale. Ce script, placé dans le dossier isolé '~/projet/passerelle-infra/scripts/' de l'utilisateur **tux**, sert de point d'entrée unique pour toute l'administration quotidienne du VPS.

===== 1. Interface et Ergonomie de la Console =====

L'interface doit être sobre, rapide et optimisée pour un affichage en terminal SSH :
  * **Boucle permanente :** Le menu s'exécute dans une boucle continue. Une fois une action terminée, le script attend une validation de l'administrateur avant de réafficher le menu principal.
  * **Codes couleur standards :** Utilisation des couleurs du terminal pour une lisibilité immédiate (Vert = Succès / Information, Rouge = Alerte / Erreur, Jaune = Attention / Saisie requise).
  * **Retour Visuel Immédiat :** Chaque action affiche un bilan textuel clair à l'écran à la fin de son exécution.

===== 2. Arborescence du Menu Interactif & Chemins Réels =====

À l'exécution, le script présente la liste numérotée des fonctionnalités. Chaque option exécute de manière étanche un sous-script logé dans le répertoire de l'infrastructure :

==== Option 1 : Supervision & Statut global ====
Affiche l'état instantané du VPS (Charge CPU, RAM disponible, espace disque, statut du service WireGuard, Nginx et Postfix) ainsi que la liste des tunnels VPN actifs.
➔ *Appelle : 'bash ~/projet/passerelle-infra/scripts/10_script_supervision.sh'*

==== Option 2 : Ajouter une liaison VPN Client ====
Demande les informations nécessaires pour raccorder un nouveau PC distant ou un conteneur au réseau privé.
➔ *Appelle : 'bash ~/projet/passerelle-infra/scripts/05_script_ajout_vpn.sh'*

==== Option 3 : Retirer une liaison VPN Client ====
Sélectionne un utilisateur actif pour révoquer ses clés de sécurité et couper son accès.
➔ *Appelle : 'bash ~/projet/passerelle-infra/scripts/06_script_retrait_vpn.sh'*

==== Option 4 : Déployer une nouvelle VM Conteneur ====
Instancie un nouvel environnement Linux isolé directement sur le VPS et le lie au VPN.
➔ *Appelle : 'bash ~/projet/passerelle-infra/scripts/07_script_ajout_conteneur.sh'*

==== Option 5 : Dupliquer une VM Conteneur ====
Clone une instance existante ou un modèle de référence vers un nouvel environnement.
➔ *Appelle : 'bash ~/projet/passerelle-infra/scripts/08_script_duplication_conteneur.sh'*

==== Option 6 : Supprimer une VM Conteneur ====
Arrête et détruit définitivement une instance pour libérer les ressources.
➔ *Appelle : 'bash ~/projet/passerelle-infra/scripts/09_script_suppression_conteneur.sh'*

==== Option 7 : Sauvegarder l'infrastructure (Pack .tar) ====
Déclenche la création de l'archive de secours autonome contenant les fichiers de configuration, les scripts et la documentation de reconstruction.
➔ *Appelle : 'bash ~/projet/passerelle-infra/scripts/11_script_sauvegarde.sh'*

==== Option 8 : Quitter le gestionnaire ====
Ferme proprement le script et redonne la main au terminal standard de 'tux'.

===== 3. Principes de Prudence & Sécurité =====

Pour éviter les accidents d'administration, le menu principal intègre des barrières de sécurité logiques :

==== Validation des saisies ====
Le menu filtre toutes les entrées textuelles de l'administrateur. Les caractères non-alphanumériques (hors points pour les domaines) sont rejetés pour empêcher toute exécution de commande malveillante indirecte.

==== Mécanisme de confirmation inverse ====
Toute action entraînant une perte de données (Options 3, 6 et 9) déclenche une demande de confirmation obligatoire. L'action n'est validée que si l'administrateur tape explicitement 'o' ou 'oui'. Un simple appui sur la touche ENTRÉE annule l'action par sécurité.

==== Journalisation (Logs) ====
Chaque ouverture du menu, chaque sélection d'option et le résultat de chaque sous-script sont automatiquement horodatés et consignés via la fonction 'tux.enregistrerLog' en tâche de fond dans le fichier '/var/log/vps-gateway.log'.

[[./accueil| ↩ Retour à l'accueil du projet]]
