Refactoring
This commit is contained in:
144
start_keycloak.py
Normal file
144
start_keycloak.py
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user