#!/bin/bash echo "=============================================================================" echo "🚀 CONFIGURATION COMPLÈTE KEYCLOAK UNIONFLOW" echo "=============================================================================" KEYCLOAK_URL="http://localhost:8180" ADMIN_USER="admin" ADMIN_PASSWORD="admin123" # Fonction pour obtenir le token admin get_admin_token() { echo "🔑 Obtention du token administrateur..." ADMIN_TOKEN=$(curl -s -X POST \ "${KEYCLOAK_URL}/realms/master/protocol/openid-connect/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=${ADMIN_USER}&password=${ADMIN_PASSWORD}&grant_type=password&client_id=admin-cli" \ | jq -r '.access_token') if [ "$ADMIN_TOKEN" = "null" ] || [ -z "$ADMIN_TOKEN" ]; then echo "❌ Impossible d'obtenir le token admin" exit 1 fi echo "✅ Token admin obtenu" } # Fonction pour créer le realm create_realm() { echo "🏗️ Création du realm unionflow..." curl -s -X POST \ "${KEYCLOAK_URL}/admin/realms" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "realm": "unionflow", "enabled": true, "displayName": "UnionFlow", "loginWithEmailAllowed": true, "duplicateEmailsAllowed": false, "resetPasswordAllowed": true, "editUsernameAllowed": false, "bruteForceProtected": false }' echo "✅ Realm unionflow créé" } # Fonction pour créer le client create_client() { echo "📱 Création du client unionflow-mobile..." curl -s -X POST \ "${KEYCLOAK_URL}/admin/realms/unionflow/clients" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "clientId": "unionflow-mobile", "enabled": true, "publicClient": true, "directAccessGrantsEnabled": true, "standardFlowEnabled": true, "implicitFlowEnabled": false, "serviceAccountsEnabled": false, "redirectUris": ["*"], "webOrigins": ["*"] }' echo "✅ Client unionflow-mobile créé" } # Fonction pour créer les rôles create_roles() { echo "👥 Création des rôles..." declare -a ROLES=( "SUPER_ADMINISTRATEUR" "RESPONSABLE_TECHNIQUE" "RESPONSABLE_MEMBRES" "MEMBRE_ACTIF" "MEMBRE_SIMPLE" ) for role in "${ROLES[@]}"; do curl -s -X POST \ "${KEYCLOAK_URL}/admin/realms/unionflow/roles" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"name\": \"${role}\", \"description\": \"Rôle ${role}\"}" echo " ✓ Rôle ${role} créé" done } # Fonction pour créer un utilisateur create_user() { local username=$1 local email=$2 local firstname=$3 local lastname=$4 local password=$5 local role=$6 echo "👤 Création de l'utilisateur ${username}..." # Créer l'utilisateur USER_ID=$(curl -s -X POST \ "${KEYCLOAK_URL}/admin/realms/unionflow/users" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json" \ -d "{ \"username\": \"${username}\", \"email\": \"${email}\", \"firstName\": \"${firstname}\", \"lastName\": \"${lastname}\", \"enabled\": true, \"emailVerified\": true }" \ -w "%{http_code}" -o /dev/null) if [ "$USER_ID" != "201" ]; then echo " ⚠️ Utilisateur ${username} existe déjà ou erreur de création" fi # Obtenir l'ID de l'utilisateur USER_UUID=$(curl -s -X GET \ "${KEYCLOAK_URL}/admin/realms/unionflow/users?username=${username}" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ | jq -r '.[0].id') # Définir le mot de passe curl -s -X PUT \ "${KEYCLOAK_URL}/admin/realms/unionflow/users/${USER_UUID}/reset-password" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json" \ -d "{ \"type\": \"password\", \"value\": \"${password}\", \"temporary\": false }" # Assigner le rôle ROLE_DATA=$(curl -s -X GET \ "${KEYCLOAK_URL}/admin/realms/unionflow/roles/${role}" \ -H "Authorization: Bearer ${ADMIN_TOKEN}") curl -s -X POST \ "${KEYCLOAK_URL}/admin/realms/unionflow/users/${USER_UUID}/role-mappings/realm" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json" \ -d "[${ROLE_DATA}]" echo " ✅ Utilisateur ${username} créé avec le rôle ${role}" } # Fonction principale main() { echo "🔍 Vérification de la connexion à Keycloak..." if ! curl -s "${KEYCLOAK_URL}" > /dev/null; then echo "❌ Keycloak n'est pas accessible sur ${KEYCLOAK_URL}" exit 1 fi echo "✅ Keycloak accessible" # Obtenir le token admin get_admin_token # Créer le realm create_realm # Créer le client create_client # Créer les rôles create_roles # Créer les utilisateurs create_user "superadmin" "superadmin@unionflow.com" "Super" "Admin" "SuperAdmin123!" "SUPER_ADMINISTRATEUR" create_user "marie.active" "marie.active@unionflow.com" "Marie" "Active" "Marie123!" "MEMBRE_ACTIF" create_user "jean.simple" "jean.simple@unionflow.com" "Jean" "Simple" "Jean123!" "MEMBRE_SIMPLE" create_user "tech.lead" "tech.lead@unionflow.com" "Tech" "Lead" "TechLead123!" "RESPONSABLE_TECHNIQUE" create_user "rh.manager" "rh.manager@unionflow.com" "RH" "Manager" "RhManager123!" "RESPONSABLE_MEMBRES" echo "" echo "=============================================================================" echo "✅ CONFIGURATION TERMINÉE !" echo "=============================================================================" echo "" echo "🎯 COMPTES CRÉÉS :" echo " • superadmin / SuperAdmin123! (SUPER_ADMINISTRATEUR)" echo " • marie.active / Marie123! (MEMBRE_ACTIF)" echo " • jean.simple / Jean123! (MEMBRE_SIMPLE)" echo " • tech.lead / TechLead123! (RESPONSABLE_TECHNIQUE)" echo " • rh.manager / RhManager123! (RESPONSABLE_MEMBRES)" echo "" echo "🚀 Testez maintenant avec: ./verify-final.sh" } # Vérifier si jq est installé if ! command -v jq &> /dev/null; then echo "❌ jq n'est pas installé. Installation..." sudo apt-get update && sudo apt-get install -y jq fi main