From c994cbe155d6015caeccdfa4c175326716a77d56 Mon Sep 17 00:00:00 2001 From: Youssef Date: Fri, 4 Sep 2026 08:39:21 +0200 Subject: [PATCH] feat(backup): add automatic database restoration and RGPD anonymization for UAT environment (10.8.0.2) --- scripts/backup_db.sh | 71 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/scripts/backup_db.sh b/scripts/backup_db.sh index 0e9b36a..564b7ac 100755 --- a/scripts/backup_db.sh +++ b/scripts/backup_db.sh @@ -31,6 +31,14 @@ DB_HOST="${POSTGRES_HOST:-localhost}" DB_PORT="${POSTGRES_PORT:-5432}" CONTAINER_NAME="${DOCKER_CONTAINER_NAME:-astalange_db}" +# Variables UAT +ENABLE_UAT_RESTORE="${ENABLE_UAT_RESTORE:-true}" +UAT_DB_HOST="${UAT_DB_HOST:-10.8.0.2}" +UAT_DB_PORT="${UAT_DB_PORT:-5432}" +UAT_DB_NAME="${UAT_DB_NAME:-astalange}" +UAT_DB_USER="${UAT_DB_USER:-myuser}" +UAT_DB_PASSWORD="${UAT_DB_PASSWORD:-mypassword}" + # Configuration du transfert distant vers le VPS (optionnel) ENABLE_REMOTE_COPY="${ENABLE_REMOTE_COPY:-false}" REMOTE_HOST="${REMOTE_HOST:-}" @@ -98,6 +106,69 @@ if [ "$STATUS" = "SUCCESS" ]; then fi fi +# 2b. Restauration et Anonymisation vers la BDD UAT (10.8.0.2) +if [ "$STATUS" = "SUCCESS" ] && [ "$ENABLE_UAT_RESTORE" = "true" ]; then + log "Démarrage de la restauration et l'anonymisation sur UAT (${UAT_DB_USER}@${UAT_DB_HOST}:${UAT_DB_PORT}/${UAT_DB_NAME})..." + + ANONYMIZE_SQL=" +UPDATE adherent SET + nom = 'Nom_Adherent_' || id, + prenom = 'Prenom_Adherent_' || id, + email = 'adherent' || id || '@test.local', + telephone = '06' || LPAD((id)::text, 8, '0'), + lieu_naissance = 'Ville_' || id, + representant_legal = CASE + WHEN representant_legal IS NOT NULL AND TRIM(representant_legal) <> '' + THEN 'Representant_' || id + ELSE representant_legal + END; + +UPDATE pre_inscription SET + nom = 'Nom_PreInscr_' || id, + prenom = 'Prenom_PreInscr_' || id, + email = 'preinscr' || id || '@test.local', + telephone = '06' || LPAD((id)::text, 8, '0'), + lieu_naissance = 'Ville_' || id, + representant_legal = CASE + WHEN representant_legal IS NOT NULL AND TRIM(representant_legal) <> '' + THEN 'Representant_PreInscr_' || id + ELSE representant_legal + END; + +UPDATE educateur SET + nom = 'Nom_Educ_' || id, + prenom = 'Prenom_Educ_' || id, + email = 'educ' || id || '@test.local', + telephone = '06' || LPAD((id)::text, 8, '0'); +" + + RESTORE_SUCCESS=false + + if command -v psql >/dev/null 2>&1; then + log "Restauration UAT via psql local..." + if gunzip -c "$DUMP_PATH" | PGPASSWORD="${UAT_DB_PASSWORD}" psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" >> "$LOG_FILE" 2>&1; then + log "Exécution des requêtes d'anonymisation sur UAT..." + if PGPASSWORD="${UAT_DB_PASSWORD}" psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" -c "$ANONYMIZE_SQL" >> "$LOG_FILE" 2>&1; then + RESTORE_SUCCESS=true + fi + fi + elif command -v docker >/dev/null 2>&1; then + log "Restauration UAT via conteneur Docker postgres..." + if gunzip -c "$DUMP_PATH" | docker run --rm -i --net=host -e PGPASSWORD="${UAT_DB_PASSWORD}" postgres:15-alpine psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" >> "$LOG_FILE" 2>&1; then + log "Exécution des requêtes d'anonymisation sur UAT via Docker..." + if docker run --rm --net=host -e PGPASSWORD="${UAT_DB_PASSWORD}" postgres:15-alpine psql -h "${UAT_DB_HOST}" -p "${UAT_DB_PORT}" -U "${UAT_DB_USER}" -d "${UAT_DB_NAME}" -c "$ANONYMIZE_SQL" >> "$LOG_FILE" 2>&1; then + RESTORE_SUCCESS=true + fi + fi + fi + + if [ "$RESTORE_SUCCESS" = "true" ]; then + log "✅ Restauration et anonymisation UAT réussies avec succès !" + else + log "⚠️ AVERTISSEMENT: Impossible d'effectuer la restauration/anonymisation UAT." + fi +fi + # 3. Transfert sécurisé RSYNC / SCP vers le serveur VPS (Optionnel) if [ "$STATUS" = "SUCCESS" ] && [ "$ENABLE_REMOTE_COPY" = "true" ] && [ -n "$REMOTE_HOST" ]; then log "Transfert du dump vers le serveur VPS distant (${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_BACKUP_DIR})..."