Files
unionflow-server-api/start_keycloak.py
2025-09-19 16:09:21 +00:00

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()