Files
unionflow-server-api/cleanup-unionflow-keycloak.sh
2025-09-19 16:09:21 +00:00

269 lines
8.7 KiB
Bash

#!/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.145: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 "============================================================================="