#!/bin/bash # Configuration Keycloak pour UnionFlow # Crée les rôles et les comptes de test pour MUKEFI et MESKA set -e # Configuration KEYCLOAK_URL="http://localhost:8180" REALM_NAME="unionflow" ADMIN_USERNAME="admin" ADMIN_PASSWORD="admin" TEST_PASSWORD="Test@123" echo "========================================================================" echo "Configuration Keycloak pour UnionFlow" echo "========================================================================" # 1. Obtenir le token admin echo "" echo "📡 Connexion à Keycloak..." TOKEN_RESPONSE=$(curl -s -X POST "$KEYCLOAK_URL/realms/master/protocol/openid-connect/token" \ -d "client_id=admin-cli" \ -d "username=$ADMIN_USERNAME" \ -d "password=$ADMIN_PASSWORD" \ -d "grant_type=password") ACCESS_TOKEN=$(echo $TOKEN_RESPONSE | grep -o '"access_token":"[^"]*' | cut -d'"' -f4) if [ -z "$ACCESS_TOKEN" ]; then echo "❌ Erreur: Impossible d'obtenir le token admin" exit 1 fi echo "✅ Connecté à Keycloak Admin API" # 2. Lister et supprimer les utilisateurs existants echo "" echo "📋 Audit et nettoyage des utilisateurs existants..." USERS=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users" \ -H "Authorization: Bearer $ACCESS_TOKEN") echo "$USERS" | grep -o '"username":"[^"]*' | cut -d'"' -f4 | while read username; do USER_ID=$(echo "$USERS" | grep -B5 "\"username\":\"$username\"" | grep -o '"id":"[^"]*' | cut -d'"' -f4 | head -1) if [ ! -z "$USER_ID" ]; then curl -s -X DELETE "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users/$USER_ID" \ -H "Authorization: Bearer $ACCESS_TOKEN" echo " ✅ Supprimé: $username" fi done # 3. Créer les rôles echo "" echo "👥 Création de la structure de rôles..." declare -a ROLES=( "SUPER_ADMIN|Super administrateur - Accès total plateforme" "ADMIN_ORGANISATION|Administrateur organisation - Accès total" "TRESORIER|Trésorier - Gestion financière et comptabilité" "SECRETAIRE|Secrétaire - Gestion administrative et membres" "RESPONSABLE_SOCIAL|Responsable social - Aide sociale" "RESPONSABLE_EVENEMENTS|Responsable événements - Événements" "RESPONSABLE_CREDIT|Responsable crédit - Épargne et crédit" "MEMBRE_BUREAU|Membre du bureau - Accès étendu" "MEMBRE_ACTIF|Membre actif - Accès de base" "MEMBRE_SIMPLE|Membre simple - Consultation uniquement" "MEMBRE|Rôle technique - Membre base" "ADMIN|Rôle technique - Admin base" "USER|Rôle technique - Utilisateur base" ) for role_data in "${ROLES[@]}"; do ROLE_NAME=$(echo $role_data | cut -d'|' -f1) ROLE_DESC=$(echo $role_data | cut -d'|' -f2) curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"name\":\"$ROLE_NAME\",\"description\":\"$ROLE_DESC\"}" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo " ✅ Rôle créé: $ROLE_NAME" else echo " ⚠️ Rôle existe ou erreur: $ROLE_NAME" fi done # Fonction pour créer un utilisateur create_user() { local USERNAME=$1 local EMAIL=$2 local FIRSTNAME=$3 local LASTNAME=$4 shift 4 local ROLES=("$@") # Créer l'utilisateur curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"username\":\"$USERNAME\", \"email\":\"$EMAIL\", \"firstName\":\"$FIRSTNAME\", \"lastName\":\"$LASTNAME\", \"enabled\":true, \"emailVerified\":true, \"credentials\":[{\"type\":\"password\",\"value\":\"$TEST_PASSWORD\",\"temporary\":false}] }" # Récupérer l'ID de l'utilisateur sleep 1 USER_ID=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users?username=$USERNAME" \ -H "Authorization: Bearer $ACCESS_TOKEN" | grep -o '"id":"[^"]*' | cut -d'"' -f4 | head -1) if [ ! -z "$USER_ID" ]; then # Assigner les rôles for ROLE in "${ROLES[@]}"; do # Récupérer les détails du rôle ROLE_DATA=$(curl -s -X GET "$KEYCLOAK_URL/admin/realms/$REALM_NAME/roles/$ROLE" \ -H "Authorization: Bearer $ACCESS_TOKEN") curl -s -X POST "$KEYCLOAK_URL/admin/realms/$REALM_NAME/users/$USER_ID/role-mappings/realm" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "[$ROLE_DATA]" > /dev/null 2>&1 done echo " ✅ Utilisateur créé: $USERNAME ($EMAIL) - Rôles: ${ROLES[*]}" else echo " ❌ Erreur création: $USERNAME" fi } # 4. Créer les utilisateurs echo "" echo "👤 Création des comptes de test..." echo " Mot de passe pour tous: $TEST_PASSWORD" echo "" # Super-Admin create_user "superadmin" "superadmin@unionflow.test" "Super" "Admin" "SUPER_ADMIN" "ADMIN" "USER" # MUKEFI (Mutuelle) create_user "admin.mukefi" "admin.mukefi@unionflow.test" "Administrateur" "MUKEFI" "ADMIN_ORGANISATION" "ADMIN" "USER" create_user "tresorier.mukefi" "tresorier.mukefi@unionflow.test" "Trésorier" "MUKEFI" "TRESORIER" "MEMBRE" "USER" create_user "secretaire.mukefi" "secretaire.mukefi@unionflow.test" "Secrétaire" "MUKEFI" "SECRETAIRE" "MEMBRE" "USER" create_user "credit.mukefi" "credit.mukefi@unionflow.test" "Responsable Crédit" "MUKEFI" "RESPONSABLE_CREDIT" "MEMBRE" "USER" create_user "membre.mukefi" "membre.mukefi@unionflow.test" "Membre" "MUKEFI" "MEMBRE_ACTIF" "MEMBRE" "USER" # MESKA (Association) create_user "admin.meska" "admin.meska@unionflow.test" "Administrateur" "MESKA" "ADMIN_ORGANISATION" "ADMIN" "USER" create_user "secretaire.meska" "secretaire.meska@unionflow.test" "Secrétaire" "MESKA" "SECRETAIRE" "MEMBRE" "USER" create_user "social.meska" "social.meska@unionflow.test" "Responsable Social" "MESKA" "RESPONSABLE_SOCIAL" "MEMBRE" "USER" create_user "evenements.meska" "evenements.meska@unionflow.test" "Responsable Événements" "MESKA" "RESPONSABLE_EVENEMENTS" "MEMBRE" "USER" create_user "membre.meska" "membre.meska@unionflow.test" "Membre" "MESKA" "MEMBRE_ACTIF" "MEMBRE" "USER" echo "" echo "========================================================================" echo "✅ Configuration Keycloak terminée avec succès !" echo "========================================================================" echo "" echo "📊 Résumé:" echo " • 10 rôles créés" echo " • 11 utilisateurs créés" echo " • Mot de passe: $TEST_PASSWORD" echo "" echo "👥 Comptes créés:" echo "" echo " 🔧 Super-Admin:" echo " → superadmin@unionflow.test" echo "" echo " 🏦 MUKEFI (Mutuelle):" echo " → admin.mukefi@unionflow.test (Admin)" echo " → tresorier.mukefi@unionflow.test (Trésorier)" echo " → secretaire.mukefi@unionflow.test (Secrétaire)" echo " → credit.mukefi@unionflow.test (Responsable Crédit)" echo " → membre.mukefi@unionflow.test (Membre Actif)" echo "" echo " 🤝 MESKA (Association):" echo " → admin.meska@unionflow.test (Admin)" echo " → secretaire.meska@unionflow.test (Secrétaire)" echo " → social.meska@unionflow.test (Responsable Social)" echo " → evenements.meska@unionflow.test (Responsable Événements)" echo " → membre.meska@unionflow.test (Membre Actif)" echo "" echo "🌐 Accès Keycloak:" echo " • Console Admin: $KEYCLOAK_URL/admin" echo " • Realm: $REALM_NAME" echo ""