#!/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()