#!/bin/bash # Script de démarrage de l'API Vault sécurisée # Avec authentification par clés utilisateur et rotation automatique set -e echo "🚀 Démarrage de l'API Vault sécurisée" echo "======================================" # Vérification des prérequis echo "🔍 Vérification des prérequis..." if ! command -v python3 &> /dev/null; then echo "❌ Python3 n'est pas installé" exit 1 fi if ! command -v pip3 &> /dev/null; then echo "❌ pip3 n'est pas installé" exit 1 fi echo "✅ Python3 et pip3 disponibles" # Création de l'environnement virtuel si nécessaire if [ ! -d "venv_secure_api" ]; then echo "📦 Création de l'environnement virtuel..." python3 -m venv venv_secure_api fi # Activation de l'environnement virtuel echo "🔧 Activation de l'environnement virtuel..." source venv_secure_api/bin/activate # Installation des dépendances echo "📚 Installation des dépendances..." pip install -r requirements.txt # Vérification des fichiers requis echo "🔍 Vérification des fichiers requis..." if [ ! -f "api_server.py" ]; then echo "❌ Fichier api_server.py non trouvé" exit 1 fi if [ ! -d "storage" ]; then echo "❌ Répertoire storage non trouvé" exit 1 fi if [ ! -f "storage/dev/.env" ]; then echo "❌ Fichier storage/dev/.env non trouvé" exit 1 fi echo "✅ Tous les fichiers requis sont présents" # Nettoyage des anciens certificats SSL echo "🧹 Nettoyage des anciens certificats SSL..." rm -f /tmp/vault.key /tmp/vault.crt # Nettoyage de l'ancienne base de données de clés echo "🗑️ Nettoyage de l'ancienne base de données de clés..." rm -f /tmp/vault_keys.json echo "✅ Nettoyage terminé" # Démarrage de l'API echo "🚀 Démarrage de l'API Vault sécurisée..." echo " • URL: https://vault.4nkweb.com:6666" echo " • Authentification: ID utilisateur obligatoire" echo " • Chiffrement: Quantum-résistant (ChaCha20-Poly1305)" echo " • Rotation des clés: Automatique (1h)" echo " • HTTPS: Obligatoire" echo "" echo "📋 Endpoints disponibles:" echo " • GET /health - Contrôle de santé" echo " • GET /info - Informations sur l'API" echo " • GET // - Récupération de fichier chiffré" echo "" echo "🔑 Authentification:" echo " • Header requis: X-User-ID" echo " • Format: 3-50 caractères alphanumériques, _ et -" echo " • Exemple: X-User-ID: demo_user_001" echo "" echo "⚠️ ATTENTION: Cette API ne fonctionne qu'en HTTPS" echo " Les tentatives d'accès HTTP seront rejetées" echo "" echo "🔄 Rotation automatique des clés:" echo " • Nouvelle clé générée toutes les heures" echo " • Ancienne clé conservée pour compatibilité" echo " • Base de données: /tmp/vault_keys.json" echo "" # Test de connectivité avant démarrage echo "🔍 Test de connectivité réseau..." if command -v curl &> /dev/null; then # Test si le port est déjà utilisé if netstat -tuln 2>/dev/null | grep -q ":6666 "; then echo "⚠️ Le port 6666 est déjà utilisé" echo " Arrêt du processus existant..." pkill -f "api_server.py" || true sleep 2 fi echo "✅ Port 6666 disponible" else echo "⚠️ curl non disponible, impossible de tester la connectivité" fi echo "" echo "🎯 Démarrage en cours..." echo " Appuyez sur Ctrl+C pour arrêter l'API" echo "" # Démarrage de l'API avec gestion des signaux # Attention: éviter l'apostrophe dans le message pour ne pas casser le quoting trap "echo ''; echo '🛑 Arret de lAPI...'; kill $API_PID 2>/dev/null; exit 0" INT TERM python3 api_server.py & API_PID=$! # Attente du démarrage sleep 3 # Test de santé après démarrage echo "🏥 Test de santé de l'API..." if command -v curl &> /dev/null; then if curl -s -k -H "X-User-ID: test_user" https://127.0.0.1:6666/health > /dev/null 2>&1; then echo "✅ API démarrée avec succès" echo "" echo "🧪 Test rapide:" echo " curl -k -H 'X-User-ID: demo_user_001' https://127.0.0.1:6666/health" echo "" else echo "❌ L'API n'a pas démarré correctement" echo " Vérifiez les logs ci-dessus" kill $API_PID 2>/dev/null exit 1 fi else echo "⚠️ Impossible de tester automatiquement (curl non disponible)" echo " Testez manuellement:" echo " curl -k -H 'X-User-ID: demo_user_001' https://127.0.0.1:6666/health" fi echo "" echo "📊 Monitoring:" echo " • Logs de l'API affichés ci-dessus" echo " • Base de données des clés: /tmp/vault_keys.json" echo " • Certificats SSL: /tmp/vault.key et /tmp/vault.crt" echo "" # Attente de la fin du processus wait $API_PID