#!/bin/bash # ============================================================================= # SCRIPT DE NETTOYAGE CONFIGURATION UNIONFLOW KEYCLOAK # ============================================================================= # # Ce script supprime complètement la configuration UnionFlow de Keycloak : # - Suppression des 8 comptes de test # - Suppression des 8 rôles métier # - Nettoyage complet pour recommencer # # ⚠️ ATTENTION : Cette action est irréversible ! # # Usage : ./cleanup-unionflow-keycloak.sh # ============================================================================= set -e # Configuration KEYCLOAK_URL="http://192.168.1.11:8180" REALM="unionflow" ADMIN_USER="admin" ADMIN_PASSWORD="admin" # Couleurs 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 } # Obtenir l'ID d'un utilisateur get_user_id() { local username="$1" local response=$(curl -s -X GET \ "${KEYCLOAK_URL}/admin/realms/${REALM}/users?username=${username}" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json") echo "$response" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4 } # Supprimer un utilisateur delete_user() { local username="$1" log_info "Suppression de l'utilisateur: $username" local user_id=$(get_user_id "$username") if [ -z "$user_id" ]; then log_warning "Utilisateur $username non trouvé" return 0 fi local response=$(curl -s -X DELETE \ "${KEYCLOAK_URL}/admin/realms/${REALM}/users/${user_id}" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json") if [ $? -eq 0 ]; then log_success "Utilisateur $username supprimé" else log_error "Erreur lors de la suppression de l'utilisateur $username" fi } # Supprimer un rôle delete_role() { local role_name="$1" log_info "Suppression du rôle: $role_name" local response=$(curl -s -X DELETE \ "${KEYCLOAK_URL}/admin/realms/${REALM}/roles/${role_name}" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json") if [ $? -eq 0 ]; then log_success "Rôle $role_name supprimé" else log_warning "Rôle $role_name non trouvé ou déjà supprimé" fi } # Confirmation de l'utilisateur confirm_cleanup() { echo "" echo "=============================================================================" echo "⚠️ ATTENTION - SUPPRESSION COMPLÈTE DE LA CONFIGURATION UNIONFLOW" echo "=============================================================================" echo "" echo "Cette action va supprimer DÉFINITIVEMENT :" echo "" echo "👥 UTILISATEURS DE TEST :" echo " • superadmin (superadmin@unionflow.dev)" echo " • admin.org (admin@association-dev.fr)" echo " • tech.lead (tech@association-dev.fr)" echo " • tresorier (tresorier@association-dev.fr)" echo " • rh.manager (rh@association-dev.fr)" echo " • marie.active (marie@association-dev.fr)" echo " • jean.simple (jean@association-dev.fr)" echo " • visiteur (visiteur@example.com)" echo "" echo "🔐 RÔLES MÉTIER :" echo " • SUPER_ADMINISTRATEUR" echo " • ADMINISTRATEUR_ORGANISATION" echo " • RESPONSABLE_TECHNIQUE" echo " • RESPONSABLE_FINANCIER" echo " • RESPONSABLE_MEMBRES" echo " • MEMBRE_ACTIF" echo " • MEMBRE_SIMPLE" echo " • VISITEUR" echo "" echo "⚠️ Cette action est IRRÉVERSIBLE !" echo "" read -p "Êtes-vous sûr de vouloir continuer ? (tapez 'SUPPRIMER' pour confirmer) : " confirmation if [ "$confirmation" != "SUPPRIMER" ]; then log_info "Opération annulée par l'utilisateur" exit 0 fi echo "" log_warning "Confirmation reçue. Début de la suppression..." echo "" } # ============================================================================= # EXÉCUTION DU NETTOYAGE # ============================================================================= echo "=============================================================================" echo "🧹 NETTOYAGE CONFIGURATION UNIONFLOW KEYCLOAK" echo "=============================================================================" # Demander confirmation confirm_cleanup # Obtenir le token d'administration get_admin_token echo "" echo "=============================================================================" echo "👥 SUPPRESSION DES UTILISATEURS DE TEST" echo "=============================================================================" echo "" # Supprimer tous les utilisateurs de test users=("superadmin" "admin.org" "tech.lead" "tresorier" "rh.manager" "marie.active" "jean.simple" "visiteur") for user in "${users[@]}"; do delete_user "$user" done echo "" echo "=============================================================================" echo "🔐 SUPPRESSION DES RÔLES MÉTIER" echo "=============================================================================" echo "" # Supprimer tous les rôles (dans l'ordre inverse de la hiérarchie) roles=("VISITEUR" "MEMBRE_SIMPLE" "MEMBRE_ACTIF" "RESPONSABLE_MEMBRES" "RESPONSABLE_FINANCIER" "RESPONSABLE_TECHNIQUE" "ADMINISTRATEUR_ORGANISATION" "SUPER_ADMINISTRATEUR") for role in "${roles[@]}"; do delete_role "$role" done echo "" echo "=============================================================================" echo "🔍 VÉRIFICATION DU NETTOYAGE" echo "=============================================================================" echo "" # Vérifier que les utilisateurs ont été supprimés log_info "Vérification de la suppression des utilisateurs..." remaining_users=0 for user in "${users[@]}"; do local user_id=$(get_user_id "$user") if [ -n "$user_id" ]; then log_warning "Utilisateur $user encore présent" ((remaining_users++)) fi done if [ $remaining_users -eq 0 ]; then log_success "Tous les utilisateurs de test ont été supprimés" else log_warning "$remaining_users utilisateurs n'ont pas pu être supprimés" fi # Vérifier que les rôles ont été supprimés log_info "Vérification de la suppression des rôles..." remaining_roles=0 for role in "${roles[@]}"; do local role_check=$(curl -s -X GET \ "${KEYCLOAK_URL}/admin/realms/${REALM}/roles/${role}" \ -H "Authorization: Bearer ${ADMIN_TOKEN}" \ -H "Content-Type: application/json") if echo "$role_check" | grep -q '"name"'; then log_warning "Rôle $role encore présent" ((remaining_roles++)) fi done if [ $remaining_roles -eq 0 ]; then log_success "Tous les rôles métier ont été supprimés" else log_warning "$remaining_roles rôles n'ont pas pu être supprimés" fi echo "" echo "=============================================================================" echo "✅ NETTOYAGE TERMINÉ" echo "=============================================================================" echo "" if [ $remaining_users -eq 0 ] && [ $remaining_roles -eq 0 ]; then log_success "🎉 Nettoyage complet réussi !" echo "" echo "✅ Tous les utilisateurs de test supprimés" echo "✅ Tous les rôles métier supprimés" echo "✅ Configuration UnionFlow complètement nettoyée" echo "" echo "🚀 Vous pouvez maintenant relancer setup-unionflow-keycloak.sh" else log_warning "⚠️ Nettoyage partiel" echo "" echo "Éléments restants :" echo " • Utilisateurs : $remaining_users" echo " • Rôles : $remaining_roles" echo "" echo "🔧 Vous pouvez relancer ce script ou supprimer manuellement via l'interface Keycloak" fi echo "" echo "============================================================================="