diff --git a/remove-users-data-timemanager.py b/remove-users-data-timemanager.py new file mode 100644 index 0000000..4f58160 --- /dev/null +++ b/remove-users-data-timemanager.py @@ -0,0 +1,116 @@ +import csv +import requests +import json +import uuid +import re +import base64 +import sys +import mysql.connector +from unidecode import unidecode + +########################################## +# Config +########################################## +# Récupération de la config +with open('config.json', 'r') as f: + config = json.load(f) + +mydb = mysql.connector.connect( + host=config['db_host'], + user=config['db_user'], + password=config['db_password'], + database=config['db_database'] +) +cursor = mydb.cursor(buffered=True) + +# Argument --yes pour auto-valider toutes les suppressions +valid_args = {'-y', '--yes'} +extra_args = [arg for arg in sys.argv[1:] if arg not in valid_args] + +if extra_args: + print(f"Erreur : argument(s) non reconnu(s) : {' '.join(extra_args)}") + print(f"Usage : python {sys.argv[0]} [--yes | -y]") + sys.exit(1) + +auto_confirm = bool(set(sys.argv[1:]) & valid_args) + +########################################## +# Fonctions +########################################## + +def check_users_exist(user_id): + """Vérifie si l'utilisateur existe dans oc_users.""" + cursor.execute("SELECT uid FROM oc_users WHERE uid = %s", (user_id,)) + return cursor.fetchone() is not None + +def remove_row_on_table_for_user(user_id, table): + """Supprime toutes les entrées d'une table pour un utilisateur donné.""" + query = f"DELETE FROM `{table}` WHERE user_id = %s" + cursor.execute(query, (user_id,)) + affected = cursor.rowcount + mydb.commit() + print(f" [{table}] {affected} ligne(s) supprimée(s)") + +########################################## +# Main +########################################## + +tables = [ + "oc_timemanager_client", + "oc_timemanager_commit", + "oc_timemanager_project", + "oc_timemanager_task", + "oc_timemanager_time" +] + +# Listing de tous les utilisateurs configurés avant toute action +print("==========================================") +print("Utilisateurs configurés dans config.json :") +print("==========================================") +valid_users = [] +for user_info in config['calendars']: + user_id = user_info.get('user_name', '') + if not user_id: + print(f" ⚠ [{user_id or '???'}] — infos de connexion incomplètes, ignoré") + continue + exists = check_users_exist(user_id) + status = "✔ existe en BDD" if exists else "✘ introuvable en BDD" + print(f" • {user_id} — {status}") + if exists: + valid_users.append(user_info) + +print() + +if not valid_users: + print("Aucun utilisateur valide à traiter. Fin du script.") + cursor.close() + mydb.close() + sys.exit(0) + +if auto_confirm: + print("Mode auto-confirmation activé (--yes) : toutes les suppressions seront effectuées sans demande.\n") + +# Traitement par utilisateur +for user_info in valid_users: + user_id = user_info['user_name'] + print("==========================================") + print(f"User : {user_id}") + print("==========================================") + + if auto_confirm: + confirmed = True + else: + reponse = input(f"\nSupprimer toutes les données TimeManager de '{user_id}' ? [o/N] : ").strip().lower() + confirmed = reponse in ('o', 'oui', 'y', 'yes') + + if confirmed: + print("Suppression en cours...") + for table in tables: + remove_row_on_table_for_user(user_id, table) + print(f"✔ Données de '{user_id}' supprimées.\n") + else: + print(f"✘ Suppression annulée pour '{user_id}'.\n") + +cursor.close() +mydb.close() +print("Terminé.")