Files
unionflow-server-impl-quarkus/setup-complete.sh
2025-09-19 16:09:21 +00:00

210 lines
6.7 KiB
Bash

#!/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