4NK_node/scripts/manage_auth.sh
Debian fe3012ef2f
Some checks failed
CI - 4NK_node / Code Quality (push) Failing after 46s
CI - 4NK_node / Unit Tests (push) Failing after 30s
CI - 4NK_node / Integration Tests (push) Failing after 11s
CI - 4NK_node / Security Tests (push) Failing after 29s
CI - 4NK_node / Docker Build & Test (push) Failing after 10s
CI - 4NK_node / Documentation Tests (push) Failing after 3s
CI - 4NK_node / Security Audit (push) Successful in 3s
CI - 4NK_node / Release Guard (push) Has been skipped
CI - 4NK_node / Performance Tests (push) Successful in 29s
CI - 4NK_node / Notify (push) Failing after 2s
CI - 4NK_node / Publish Release (push) Has been skipped
chore: centralise conf, HTTP-only nginx, RPC 38332, remove cookie, fix network CIDR, drop *.backup from VCS
2025-09-02 11:14:04 +00:00

178 lines
5.6 KiB
Bash
Executable File

#!/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 "$@"