Refactoring
This commit is contained in:
252
verify-unionflow-keycloak.sh
Normal file
252
verify-unionflow-keycloak.sh
Normal file
@@ -0,0 +1,252 @@
|
||||
#!/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.145: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 "============================================================================="
|
||||
Reference in New Issue
Block a user