
- API complètement dynamique: routes /<env>/<project>/<file_name> - Scanner automatique de tous les environnements disponibles - Sécurité renforcée contre path traversal attacks - Endpoint /routes dynamique avec 72 fichiers détectés - SDK mis à jour pour récupération dynamique des routes - Gestion d'erreurs complète et logs de sécurité - Architecture production-ready avec multi-environnements
156 lines
4.6 KiB
Bash
Executable File
156 lines
4.6 KiB
Bash
Executable File
#!/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 /<env>/<file> - 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
|