Files
unionflow-mobile-apps/test_auth.py
2025-09-19 16:09:21 +00:00

141 lines
5.0 KiB
Python

#!/usr/bin/env python3
"""
Script de test d'authentification pour tous les comptes UnionFlow
"""
import requests
import json
from typing import Dict, List, Tuple
class AuthTester:
def __init__(self, base_url: str = "http://localhost:8180"):
self.base_url = base_url
self.session = requests.Session()
def test_account(self, username: str, password: str, realm: str = "unionflow",
client_id: str = "unionflow-mobile") -> Tuple[bool, str]:
"""Teste l'authentification d'un compte"""
try:
data = {
"username": username,
"password": password,
"grant_type": "password",
"client_id": client_id
}
response = self.session.post(
f"{self.base_url}/realms/{realm}/protocol/openid-connect/token",
data=data,
headers={"Content-Type": "application/x-www-form-urlencoded"},
timeout=10
)
if response.status_code == 200:
token_data = response.json()
if "access_token" in token_data:
return True, "Authentification réussie"
else:
return False, "Token manquant dans la réponse"
else:
error_data = response.json() if response.content else {}
error_msg = error_data.get("error_description", f"HTTP {response.status_code}")
return False, error_msg
except requests.exceptions.RequestException as e:
return False, f"Erreur de connexion: {e}"
except json.JSONDecodeError:
return False, "Réponse JSON invalide"
except Exception as e:
return False, f"Erreur inattendue: {e}"
def test_all_accounts(self) -> None:
"""Teste tous les comptes UnionFlow"""
accounts = [
("superadmin", "SuperAdmin123!", "SUPER_ADMINISTRATEUR"),
("marie.active", "Marie123!", "MEMBRE_ACTIF"),
("jean.simple", "Jean123!", "MEMBRE_SIMPLE"),
("tech.lead", "TechLead123!", "RESPONSABLE_TECHNIQUE"),
("rh.manager", "RhManager123!", "RESPONSABLE_MEMBRES")
]
print("=" * 80)
print("🔍 TEST D'AUTHENTIFICATION UNIONFLOW")
print("=" * 80)
print()
# Vérifier que Keycloak est accessible
try:
response = self.session.get(f"{self.base_url}", timeout=5)
if response.status_code != 200:
print("❌ Keycloak n'est pas accessible")
return
except:
print("❌ Keycloak n'est pas accessible")
return
print("✅ Keycloak accessible")
print()
success_count = 0
total_count = len(accounts)
for username, password, role in accounts:
print(f"🧪 Test {username}...", end=" ")
success, message = self.test_account(username, password)
if success:
print(f"✅ SUCCÈS")
print(f" └─ Rôle: {role}")
success_count += 1
else:
print(f"❌ ÉCHEC")
print(f" └─ Erreur: {message}")
print()
print("=" * 80)
print("📊 RÉSULTAT FINAL")
print("=" * 80)
print()
if success_count == total_count:
print("🎉 PARFAIT ! Tous les comptes fonctionnent !")
print(f"{success_count}/{total_count} comptes opérationnels")
print()
print("🚀 PRÊT POUR L'APPLICATION MOBILE :")
print()
print(" 📱 TESTEZ MAINTENANT SUR VOTRE SAMSUNG :")
print(" 1. Ouvrez l'app UnionFlow")
print(" 2. Cliquez sur 'Se connecter avec Keycloak'")
print(" 3. Utilisez: marie.active / Marie123!")
print(" 4. Vérifiez que l'authentification fonctionne")
print()
print(" 🔐 AUTRES COMPTES DISPONIBLES :")
for username, password, role in accounts:
print(f"{username} / {password} ({role})")
print()
print("✅ ARCHITECTURE RÔLES UNIONFLOW 100% OPÉRATIONNELLE !")
elif success_count > 0:
print(f"⚠️ Configuration partielle ({success_count}/{total_count} comptes fonctionnent)")
print(" Vous pouvez tester avec les comptes qui marchent")
print(" Relancez: python setup_keycloak.py pour corriger")
else:
print("❌ Aucun compte ne fonctionne")
print(" Vérifiez que Keycloak est configuré correctement")
print(" Relancez: python setup_keycloak.py")
print()
print("=" * 80)
def main():
"""Fonction principale"""
tester = AuthTester()
tester.test_all_accounts()
if __name__ == "__main__":
main()