From 506dfb10861f6d0642cda1b98d8be3a9ae9fd795 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9drix?= <cedric@abonnel.fr>
Date: Thu, 20 Mar 2025 07:27:41 +0100
Subject: [PATCH] choix de l'interface et de l'interface IP

---
 scripts/server-dhcp/setup_dhcp.sh | 57 ++++++++++++++++++-------------
 1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/scripts/server-dhcp/setup_dhcp.sh b/scripts/server-dhcp/setup_dhcp.sh
index 3265075..0f606f2 100644
--- a/scripts/server-dhcp/setup_dhcp.sh
+++ b/scripts/server-dhcp/setup_dhcp.sh
@@ -18,42 +18,51 @@ else
     echo "dnsmasq est déjà installé."
 fi
 
+# Récupérer toutes les interfaces réseau sauf loopback
+mapfile -t NOMS < <(ip -o link show | awk -F': ' '{print $2}' | grep -v lo)
 
-# Récupérer toutes les interfaces avec leurs IP v4, sauf loopback
-mapfile -t IPS < <(ip -4 -o addr show | awk '!/ lo / {print $2" "$4}')
-
-if [[ ${#IPS[@]} -eq 0 ]]; then
-    echo "Aucune interface réseau avec une adresse IPv4 trouvée."
+if [[ ${#NOMS[@]} -eq 0 ]]; then
+    echo "Aucune interface réseau trouvée."
     exit 1
 fi
 
-echo "Sélectionnez l'interface et l'IP à utiliser :"
-select CHOIX in "${IPS[@]}"; do
-    if [[ -n "$CHOIX" ]]; then
-        INTERFACE=$(echo "$CHOIX" | awk '{print $1}')
-        IP_SERVEUR=$(echo "$CHOIX" | awk '{print $2}' | cut -d'/' -f1)
-        break
+# Construire les options avec IP si existante
+OPTIONS=()
+for IFACE in "${NOMS[@]}"; do
+    # Nettoyer l'interface de @ifX
+    IFACE_CLEAN=$(echo "$IFACE" | cut -d'@' -f1)
+    IP=$(ip -4 -o addr show "$IFACE_CLEAN" 2>/dev/null | awk '{print $4}' | cut -d'/' -f1)
+    if [[ -n "$IP" ]]; then
+        OPTIONS+=("$IFACE_CLEAN ($IP)")
     else
-        echo "Choix invalide."
+        OPTIONS+=("$IFACE_CLEAN (Pas d'IP)")
     fi
 done
 
-echo "Interface sélectionnée : $INTERFACE"
-echo "Adresse IP sélectionnée : $IP_SERVEUR"
-
-# Demander si l'utilisateur veut utiliser une autre IP
-read -rp "Voulez-vous utiliser une autre adresse IP que $IP_SERVEUR ? (o/N) : " REPONSE
-
-if [[ "$REPONSE" =~ ^[oO]$ ]]; then
-    read -rp "Saisissez l'adresse IP souhaitée : " IP_MANUELLE
-    if [[ "$IP_MANUELLE" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
-        IP_SERVEUR="$IP_MANUELLE"
-        echo "✅ Nouvelle adresse IP sélectionnée : $IP_SERVEUR"
+echo "Sélectionnez l'interface réseau à utiliser (IP affichée si existante) :"
+PS3="Votre choix : "
+select CHOIX in "${OPTIONS[@]}"; do
+    if [[ -n "$CHOIX" ]]; then
+        INTERFACE=$(echo "$CHOIX" | awk '{print $1}')
+        break
     else
-        echo "❌ Adresse IP invalide. On garde l'IP sélectionnée : $IP_SERVEUR"
+        echo "Choix invalide. Veuillez réessayer."
     fi
+done
+
+# Maintenant que l'interface est choisie, récupérer l'IP
+IP_EXISTANTE=$(ip -4 -o addr show "$INTERFACE" 2>/dev/null | awk '{print $4}' | cut -d'/' -f1)
+
+if [[ -n "$IP_EXISTANTE" ]]; then
+    IP_SERVEUR="$IP_EXISTANTE"
+else
+    read -rp "Aucune IP détectée sur $INTERFACE. Veuillez entrer une IP à utiliser : " IP_SAISIE
+    IP_SERVEUR="$IP_SAISIE"
 fi
 
+echo "✅ Interface sélectionnée : $INTERFACE"
+echo "✅ Adresse IP sélectionnée : $IP_SERVEUR"
+
 # Vérifier si l'IP est privée ou publique
 if [[ "$IP_SERVEUR" =~ ^10\. ]] || [[ "$IP_SERVEUR" =~ ^192\.168\. ]] || [[ "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. ]]; then
     echo "✅ Adresse IP privée détectée : $IP_SERVEUR"