253 lines
9.0 KiB
Bash
253 lines
9.0 KiB
Bash
#!/bin/bash
|
|
|
|
# =============================================================================
|
|
# SCRIPT DE VÉRIFICATION CONFIGURATION UNIONFLOW KEYCLOAK
|
|
# =============================================================================
|
|
#
|
|
# Ce script vérifie que la configuration des rôles UnionFlow est correcte :
|
|
# - Vérification de l'existence des rôles
|
|
# - Test d'authentification pour chaque compte
|
|
# - Vérification des attributs et permissions
|
|
# - Génération d'un rapport de statut
|
|
#
|
|
# Usage : ./verify-unionflow-keycloak.sh
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
KEYCLOAK_URL="http://192.168.1.11:8180"
|
|
REALM="unionflow"
|
|
ADMIN_USER="admin"
|
|
ADMIN_PASSWORD="admin"
|
|
CLIENT_ID="unionflow-mobile"
|
|
|
|
# Couleurs pour l'affichage
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
|
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
|
|
# Obtenir le token d'administration
|
|
get_admin_token() {
|
|
log_info "Obtention du token d'administration..."
|
|
|
|
local response=$(curl -s -X POST \
|
|
"${KEYCLOAK_URL}/realms/master/protocol/openid-connect/token" \
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
-d "username=${ADMIN_USER}" \
|
|
-d "password=${ADMIN_PASSWORD}" \
|
|
-d "grant_type=password" \
|
|
-d "client_id=admin-cli")
|
|
|
|
ADMIN_TOKEN=$(echo "$response" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
|
|
|
|
if [ -n "$ADMIN_TOKEN" ]; then
|
|
log_success "Token d'administration obtenu"
|
|
else
|
|
log_error "Impossible d'obtenir le token d'administration"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Vérifier l'existence d'un rôle
|
|
check_role() {
|
|
local role_name="$1"
|
|
local expected_level="$2"
|
|
|
|
local response=$(curl -s -X GET \
|
|
"${KEYCLOAK_URL}/admin/realms/${REALM}/roles/${role_name}" \
|
|
-H "Authorization: Bearer ${ADMIN_TOKEN}" \
|
|
-H "Content-Type: application/json")
|
|
|
|
if echo "$response" | grep -q '"name"'; then
|
|
local level=$(echo "$response" | grep -o '"level":\["[^"]*' | cut -d'"' -f4)
|
|
if [ "$level" = "$expected_level" ]; then
|
|
log_success "✓ Rôle $role_name (niveau $level)"
|
|
return 0
|
|
else
|
|
log_warning "⚠ Rôle $role_name existe mais niveau incorrect: $level (attendu: $expected_level)"
|
|
return 1
|
|
fi
|
|
else
|
|
log_error "✗ Rôle $role_name manquant"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Tester l'authentification d'un utilisateur
|
|
test_user_auth() {
|
|
local username="$1"
|
|
local password="$2"
|
|
local expected_role="$3"
|
|
|
|
log_info "Test authentification: $username"
|
|
|
|
local auth_response=$(curl -s -X POST \
|
|
"${KEYCLOAK_URL}/realms/${REALM}/protocol/openid-connect/token" \
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
-d "username=${username}" \
|
|
-d "password=${password}" \
|
|
-d "grant_type=password" \
|
|
-d "client_id=${CLIENT_ID}")
|
|
|
|
if echo "$auth_response" | grep -q "access_token"; then
|
|
# Décoder le token pour vérifier les rôles
|
|
local access_token=$(echo "$auth_response" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
|
|
|
|
# Obtenir les informations utilisateur
|
|
local user_info=$(curl -s -X GET \
|
|
"${KEYCLOAK_URL}/realms/${REALM}/protocol/openid-connect/userinfo" \
|
|
-H "Authorization: Bearer ${access_token}")
|
|
|
|
if echo "$user_info" | grep -q "email"; then
|
|
local email=$(echo "$user_info" | grep -o '"email":"[^"]*' | cut -d'"' -f4)
|
|
log_success "✓ $username ($email) - Authentification réussie"
|
|
|
|
# Vérifier les rôles via l'API admin
|
|
local user_id=$(curl -s -X GET \
|
|
"${KEYCLOAK_URL}/admin/realms/${REALM}/users?username=${username}" \
|
|
-H "Authorization: Bearer ${ADMIN_TOKEN}" \
|
|
-H "Content-Type: application/json" | \
|
|
grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4)
|
|
|
|
if [ -n "$user_id" ]; then
|
|
local user_roles=$(curl -s -X GET \
|
|
"${KEYCLOAK_URL}/admin/realms/${REALM}/users/${user_id}/role-mappings/realm" \
|
|
-H "Authorization: Bearer ${ADMIN_TOKEN}" \
|
|
-H "Content-Type: application/json")
|
|
|
|
if echo "$user_roles" | grep -q "\"name\":\"$expected_role\""; then
|
|
log_success " → Rôle $expected_role correctement assigné"
|
|
return 0
|
|
else
|
|
log_warning " → Rôle $expected_role non trouvé dans les assignations"
|
|
return 1
|
|
fi
|
|
fi
|
|
else
|
|
log_error "✗ $username - Impossible d'obtenir les informations utilisateur"
|
|
return 1
|
|
fi
|
|
else
|
|
log_error "✗ $username - Échec de l'authentification"
|
|
echo "Réponse: $auth_response"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Générer un rapport de statut
|
|
generate_status_report() {
|
|
echo ""
|
|
echo "============================================================================="
|
|
echo "📊 RAPPORT DE STATUT CONFIGURATION UNIONFLOW"
|
|
echo "============================================================================="
|
|
echo ""
|
|
|
|
local total_roles=8
|
|
local total_users=8
|
|
local roles_ok=0
|
|
local users_ok=0
|
|
|
|
# Vérification des rôles
|
|
echo "🔐 VÉRIFICATION DES RÔLES :"
|
|
echo ""
|
|
|
|
declare -A roles_levels=(
|
|
["SUPER_ADMINISTRATEUR"]="100"
|
|
["ADMINISTRATEUR_ORGANISATION"]="85"
|
|
["RESPONSABLE_TECHNIQUE"]="80"
|
|
["RESPONSABLE_FINANCIER"]="75"
|
|
["RESPONSABLE_MEMBRES"]="70"
|
|
["MEMBRE_ACTIF"]="50"
|
|
["MEMBRE_SIMPLE"]="30"
|
|
["VISITEUR"]="0"
|
|
)
|
|
|
|
for role in "${!roles_levels[@]}"; do
|
|
if check_role "$role" "${roles_levels[$role]}"; then
|
|
((roles_ok++))
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "👥 VÉRIFICATION DES COMPTES DE TEST :"
|
|
echo ""
|
|
|
|
declare -A test_accounts=(
|
|
["superadmin"]="SuperAdmin123!:SUPER_ADMINISTRATEUR"
|
|
["admin.org"]="AdminOrg123!:ADMINISTRATEUR_ORGANISATION"
|
|
["tech.lead"]="TechLead123!:RESPONSABLE_TECHNIQUE"
|
|
["tresorier"]="Tresorier123!:RESPONSABLE_FINANCIER"
|
|
["rh.manager"]="RhManager123!:RESPONSABLE_MEMBRES"
|
|
["marie.active"]="Marie123!:MEMBRE_ACTIF"
|
|
["jean.simple"]="Jean123!:MEMBRE_SIMPLE"
|
|
["visiteur"]="Visiteur123!:VISITEUR"
|
|
)
|
|
|
|
for username in "${!test_accounts[@]}"; do
|
|
IFS=':' read -r password expected_role <<< "${test_accounts[$username]}"
|
|
if test_user_auth "$username" "$password" "$expected_role"; then
|
|
((users_ok++))
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "============================================================================="
|
|
echo "📈 RÉSUMÉ FINAL"
|
|
echo "============================================================================="
|
|
echo ""
|
|
echo "🔐 Rôles : $roles_ok/$total_roles configurés correctement"
|
|
echo "👥 Utilisateurs : $users_ok/$total_users authentifiés avec succès"
|
|
echo ""
|
|
|
|
if [ $roles_ok -eq $total_roles ] && [ $users_ok -eq $total_users ]; then
|
|
log_success "🎉 Configuration UnionFlow Keycloak 100% opérationnelle !"
|
|
echo ""
|
|
echo "✅ Tous les rôles sont créés avec les bons niveaux"
|
|
echo "✅ Tous les comptes de test fonctionnent"
|
|
echo "✅ Les assignations de rôles sont correctes"
|
|
echo ""
|
|
echo "🚀 L'application mobile peut maintenant utiliser ces comptes pour les tests !"
|
|
return 0
|
|
else
|
|
log_error "❌ Configuration incomplète détectée"
|
|
echo ""
|
|
echo "🔧 Actions recommandées :"
|
|
if [ $roles_ok -lt $total_roles ]; then
|
|
echo " • Vérifier la création des rôles manquants"
|
|
fi
|
|
if [ $users_ok -lt $total_users ]; then
|
|
echo " • Vérifier la création et configuration des utilisateurs"
|
|
fi
|
|
echo " • Relancer le script setup-unionflow-keycloak.sh si nécessaire"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# =============================================================================
|
|
# EXÉCUTION DU SCRIPT DE VÉRIFICATION
|
|
# =============================================================================
|
|
|
|
echo "============================================================================="
|
|
echo "🔍 VÉRIFICATION CONFIGURATION UNIONFLOW KEYCLOAK"
|
|
echo "============================================================================="
|
|
echo ""
|
|
|
|
# Obtenir le token d'administration
|
|
get_admin_token
|
|
|
|
# Générer le rapport de statut complet
|
|
generate_status_report
|
|
|
|
echo ""
|
|
echo "============================================================================="
|
|
echo "✅ VÉRIFICATION TERMINÉE"
|
|
echo "============================================================================="
|