- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics) * Backend: KafkaEventProducer, KafkaEventConsumer * Mobile: WebSocketService (reconnection, heartbeat, typed events) * DashboardBloc: Auto-refresh depuis WebSocket events - Finance Workflow: approbations + budgets (backend + mobile) * Backend: entities, services, resources, migrations Flyway V6 * Mobile: features finance_workflow complète avec BLoC - Corrections DI: interfaces IRepository partout * IProfileRepository, IOrganizationRepository, IMembreRepository * GetIt configuré avec @injectable - Spec-Kit: constitution + templates mis à jour * .specify/memory/constitution.md enrichie * Templates agent, plan, spec, tasks, checklist - Nettoyage: fichiers temporaires supprimés Signed-off-by: lions dev Team
190 lines
7.3 KiB
Bash
190 lines
7.3 KiB
Bash
#!/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 ""
|