145 lines
4.3 KiB
Python
145 lines
4.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Script pour démarrer Keycloak et configurer UnionFlow automatiquement
|
|
"""
|
|
|
|
import subprocess
|
|
import time
|
|
import requests
|
|
import sys
|
|
import os
|
|
|
|
def run_command(command: str, shell: bool = True) -> tuple:
|
|
"""Exécute une commande et retourne le code de retour et la sortie"""
|
|
try:
|
|
result = subprocess.run(
|
|
command,
|
|
shell=shell,
|
|
capture_output=True,
|
|
text=True,
|
|
timeout=30
|
|
)
|
|
return result.returncode, result.stdout, result.stderr
|
|
except subprocess.TimeoutExpired:
|
|
return -1, "", "Timeout"
|
|
except Exception as e:
|
|
return -1, "", str(e)
|
|
|
|
def is_keycloak_running() -> bool:
|
|
"""Vérifie si Keycloak est en cours d'exécution"""
|
|
try:
|
|
response = requests.get("http://localhost:8180", timeout=5)
|
|
return response.status_code == 200
|
|
except:
|
|
return False
|
|
|
|
def stop_existing_keycloak():
|
|
"""Arrête les conteneurs Keycloak existants"""
|
|
print("🛑 Arrêt des conteneurs Keycloak existants...")
|
|
|
|
# Arrêter et supprimer le conteneur s'il existe
|
|
commands = [
|
|
"docker stop unionflow-keycloak",
|
|
"docker rm unionflow-keycloak"
|
|
]
|
|
|
|
for cmd in commands:
|
|
run_command(cmd)
|
|
|
|
def start_keycloak() -> bool:
|
|
"""Démarre Keycloak avec Docker"""
|
|
print("🚀 Démarrage de Keycloak...")
|
|
|
|
# Arrêter les conteneurs existants
|
|
stop_existing_keycloak()
|
|
|
|
# Démarrer un nouveau conteneur
|
|
docker_cmd = (
|
|
"docker run -d --name unionflow-keycloak "
|
|
"-p 8180:8080 "
|
|
"-e KEYCLOAK_ADMIN=admin "
|
|
"-e KEYCLOAK_ADMIN_PASSWORD=admin123 "
|
|
"-e KC_HOSTNAME_STRICT=false "
|
|
"-e KC_HOSTNAME_STRICT_HTTPS=false "
|
|
"quay.io/keycloak/keycloak:23.0.0 "
|
|
"start-dev --hostname-url=http://localhost:8180"
|
|
)
|
|
|
|
returncode, stdout, stderr = run_command(docker_cmd)
|
|
|
|
if returncode != 0:
|
|
print(f"❌ Erreur lors du démarrage de Keycloak: {stderr}")
|
|
return False
|
|
|
|
print("✅ Conteneur Keycloak démarré")
|
|
|
|
# Attendre que Keycloak soit prêt
|
|
print("⏳ Attente de la disponibilité de Keycloak...")
|
|
|
|
max_attempts = 60 # 2 minutes
|
|
for attempt in range(max_attempts):
|
|
if is_keycloak_running():
|
|
print("✅ Keycloak est prêt !")
|
|
return True
|
|
|
|
if attempt % 10 == 0:
|
|
print(f" Tentative {attempt + 1}/{max_attempts}...")
|
|
|
|
time.sleep(2)
|
|
|
|
print("❌ Keycloak n'est pas devenu disponible dans les temps")
|
|
return False
|
|
|
|
def main():
|
|
"""Fonction principale"""
|
|
print("=" * 80)
|
|
print("🚀 DÉMARRAGE ET CONFIGURATION UNIONFLOW")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
# 1. Vérifier si Keycloak est déjà en cours d'exécution
|
|
if is_keycloak_running():
|
|
print("✅ Keycloak est déjà en cours d'exécution")
|
|
else:
|
|
# 2. Démarrer Keycloak
|
|
if not start_keycloak():
|
|
print("❌ Impossible de démarrer Keycloak")
|
|
sys.exit(1)
|
|
|
|
print()
|
|
|
|
# 3. Lancer la configuration automatique
|
|
print("🔧 Lancement de la configuration automatique...")
|
|
print()
|
|
|
|
try:
|
|
# Importer et exécuter la configuration
|
|
from setup_keycloak import KeycloakSetup
|
|
|
|
setup = KeycloakSetup()
|
|
success = setup.setup_complete()
|
|
|
|
if success:
|
|
print()
|
|
print("🎯 CONFIGURATION TERMINÉE AVEC SUCCÈS !")
|
|
print()
|
|
print("📋 PROCHAINES ÉTAPES :")
|
|
print(" 1. Testez les comptes: python test_auth.py")
|
|
print(" 2. Lancez votre application mobile UnionFlow")
|
|
print(" 3. Utilisez marie.active / Marie123! pour tester")
|
|
print()
|
|
else:
|
|
print("⚠️ Configuration partiellement réussie")
|
|
print(" Consultez les messages ci-dessus pour plus de détails")
|
|
|
|
except ImportError:
|
|
print("❌ Impossible d'importer setup_keycloak.py")
|
|
print(" Assurez-vous que le fichier existe dans le même répertoire")
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print(f"❌ Erreur lors de la configuration: {e}")
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|