feat: WebSocket temps réel + Finance Workflow + corrections
- 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
This commit is contained in:
189
unionflow/scripts/keycloak-setup.sh
Normal file
189
unionflow/scripts/keycloak-setup.sh
Normal file
@@ -0,0 +1,189 @@
|
||||
#!/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 ""
|
||||
Reference in New Issue
Block a user