#!/usr/bin/env bash # # Transforme MAINTENANCE_IP_LIST="1.2.3.4, 5.6.7.8" en un snippet Nginx : # # geo $ip_in_list { # default 0; # 1.2.3.4 1; # 5.6.7.8 1; # } # # Toute IP malformée (non IPv4 valide) provoque une sortie en erreur. # Usage : build-ip-list.sh set -euo pipefail if [[ $# -ne 1 ]]; then echo "usage: $(basename "$0") " >&2 exit 2 fi output_file="$1" if [[ -z "${MAINTENANCE_IP_LIST:-}" ]]; then echo "ERROR: MAINTENANCE_IP_LIST est vide ou non défini." >&2 exit 1 fi # Regex IPv4 stricte : chaque octet entre 0 et 255. ipv4_regex='^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$' declare -a ips=() # Découpe sur la virgule, trim les espaces, ignore les entrées vides. IFS=',' read -ra raw_entries <<< "$MAINTENANCE_IP_LIST" for raw in "${raw_entries[@]}"; do ip="${raw// /}" [[ -z "$ip" ]] && continue if ! [[ "$ip" =~ $ipv4_regex ]]; then echo "ERROR: IP invalide dans MAINTENANCE_IP_LIST : '$ip'" >&2 exit 1 fi ips+=("$ip") done if [[ ${#ips[@]} -eq 0 ]]; then echo "ERROR: MAINTENANCE_IP_LIST ne contient aucune IP exploitable." >&2 exit 1 fi { echo "# Généré automatiquement par scripts/build-ip-list.sh — ne pas éditer à la main." echo "geo \$ip_in_list {" echo " default 0;" for ip in "${ips[@]}"; do printf ' %-15s 1;\n' "$ip" done echo "}" } > "$output_file" echo "build-ip-list: ${#ips[@]} IP écrites dans $output_file" >&2