210 lines
6.7 KiB
Bash
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
|