#!/bin/bash # Script de gestion de l'authentification et des fichiers partagĂ©s # pour la stack 4NK_node set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" echo "🔐 Gestion de l'authentification et des fichiers partagĂ©s 4NK_node" # Fonction pour vĂ©rifier si un conteneur est en cours d'exĂ©cution container_running() { docker ps --format "table {{.Names}}" | grep -q "$1" } # Fonction pour attendre qu'un conteneur soit prĂȘt wait_for_container() { local container_name="$1" local max_wait=60 local wait_time=0 echo "⏳ Attente que le conteneur $container_name soit prĂȘt..." while [ $wait_time -lt $max_wait ]; do if container_running "$container_name"; then echo "✅ Conteneur $container_name est prĂȘt" return 0 fi sleep 2 wait_time=$((wait_time + 2)) done echo "❌ Timeout en attendant le conteneur $container_name" return 1 } # Fonction pour vĂ©rifier et crĂ©er le fichier .cookie setup_bitcoin_cookie() { echo "🔍 Configuration du fichier .cookie Bitcoin..." if ! container_running "4nk-bitcoin"; then echo "❌ Le conteneur Bitcoin n'est pas en cours d'exĂ©cution" return 1 fi # Attendre que Bitcoin soit complĂštement dĂ©marrĂ© wait_for_container "4nk-bitcoin" sleep 10 # VĂ©rifier si le fichier .cookie existe if docker exec 4nk-bitcoin test -f /home/bitcoin/.bitcoin/signet/.cookie; then echo "✅ Fichier .cookie Bitcoin trouvĂ©" # Afficher les informations du cookie echo "📋 Informations du fichier .cookie :" docker exec 4nk-bitcoin ls -la /home/bitcoin/.bitcoin/signet/.cookie docker exec 4nk-bitcoin cat /home/bitcoin/.bitcoin/signet/.cookie | head -1 # VĂ©rifier les permissions local perms=$(docker exec 4nk-bitcoin stat -c "%a" /home/bitcoin/.bitcoin/signet/.cookie) echo "🔐 Permissions du fichier .cookie : $perms" # S'assurer que les permissions sont correctes (600) if [ "$perms" != "600" ]; then echo "🔧 Correction des permissions du fichier .cookie..." docker exec 4nk-bitcoin chmod 600 /home/bitcoin/.bitcoin/signet/.cookie fi return 0 else echo "❌ Fichier .cookie Bitcoin non trouvĂ©" echo "📋 Logs Bitcoin rĂ©cents :" docker logs 4nk-bitcoin --tail 10 return 1 fi } # Fonction pour vĂ©rifier l'accĂšs au fichier .cookie depuis d'autres services verify_cookie_access() { echo "🔍 VĂ©rification de l'accĂšs au fichier .cookie depuis d'autres services..." local services=("4nk-blindbit" "4nk-sdk-relay1" "4nk-sdk-relay2" "4nk-sdk-relay3" "4nk-sdk-storage" "4nk-sdk-signer") for service in "${services[@]}"; do if container_running "$service"; then echo "🔍 VĂ©rification de $service..." if docker exec "$service" test -f /home/bitcoin/.bitcoin/signet/.cookie; then echo "✅ $service peut accĂ©der au fichier .cookie" # VĂ©rifier les permissions local perms=$(docker exec "$service" stat -c "%a" /home/bitcoin/.bitcoin/signet/.cookie) echo " Permissions : $perms" # VĂ©rifier la lisibilitĂ© if docker exec "$service" test -r /home/bitcoin/.bitcoin/signet/.cookie; then echo " ✅ Fichier lisible" else echo " ❌ Fichier non lisible" fi else echo "❌ $service ne peut pas accĂ©der au fichier .cookie" fi else echo "⏞ $service n'est pas en cours d'exĂ©cution" fi done } # Fonction pour tester la connectivitĂ© RPC test_rpc_connectivity() { echo "🔍 Test de la connectivitĂ© RPC..." if ! container_running "4nk-bitcoin"; then echo "❌ Bitcoin n'est pas en cours d'exĂ©cution" return 1 fi # Attendre que Bitcoin soit prĂȘt sleep 5 # Test de la connectivitĂ© RPC via curl echo "📡 Test de la connectivitĂ© RPC via HTTP..." if docker exec 4nk-bitcoin curl -s --connect-timeout 5 http://localhost:18443 > /dev/null 2>&1; then echo "✅ ConnectivitĂ© RPC HTTP OK" return 0 else echo "❌ ConnectivitĂ© RPC HTTP Ă©chouĂ©e" return 1 fi } # Fonction pour afficher le statut des volumes partagĂ©s show_shared_volumes() { echo "🔍 Statut des volumes partagĂ©s..." echo "📊 Volumes Docker :" docker volume ls | grep 4nk_node || echo "Aucun volume 4nk_node trouvĂ©" echo "📊 Volumes partagĂ©s dans docker-compose :" if [ -f "$PROJECT_DIR/docker-compose.yml" ]; then grep -A 5 -B 5 "shared_auth" "$PROJECT_DIR/docker-compose.yml" || echo "Volume shared_auth non trouvĂ©" fi } # Fonction principale main() { case "${1:-all}" in "cookie") setup_bitcoin_cookie ;; "access") verify_cookie_access ;; "rpc") test_rpc_connectivity ;; "volumes") show_shared_volumes ;; "all"|*) echo "🚀 ExĂ©cution de toutes les vĂ©rifications..." setup_bitcoin_cookie verify_cookie_access test_rpc_connectivity show_shared_volumes ;; esac echo "✅ Gestion de l'authentification terminĂ©e" } # ExĂ©cution du script main "$@"