From a0cee1eb9510f379d6c7998a9242d066c697ba86 Mon Sep 17 00:00:00 2001 From: tuxgyver Date: Wed, 13 Aug 2025 06:50:24 +0000 Subject: [PATCH] Ajouter gnome_accounts.sh --- gnome_accounts.sh | 765 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 765 insertions(+) create mode 100644 gnome_accounts.sh diff --git a/gnome_accounts.sh b/gnome_accounts.sh new file mode 100644 index 0000000..b0285e3 --- /dev/null +++ b/gnome_accounts.sh @@ -0,0 +1,765 @@ +#!/bin/bash + +# Script de sauvegarde et restauration des comptes et partages réseau GNOME +# Auteur: Fontaine Johnny +# Version: 1.0 + +# Couleurs pour l'affichage +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Répertoires et fichiers +BACKUP_DIR="$HOME/Backups/gnome-accounts-network-backup" +GOA_CONFIG_DIR="$HOME/.config/goa-1.0" +EVOLUTION_CONFIG_DIR="$HOME/.config/evolution" +KEYRING_DIR="$HOME/.local/share/keyrings" +NETWORK_CONFIG_DIR="/etc/NetworkManager/system-connections" +USER_NETWORK_CONFIG_DIR="$HOME/.config/NetworkManager" + +# Fonction d'affichage avec couleurs +print_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +print_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# Fonction pour installer les prérequis manquants +install_requirements() { + print_info "Installation automatique des prérequis manquants..." + + local packages_to_install=() + + # Vérifier dconf + if ! command -v dconf &> /dev/null; then + print_info "dconf manquant - ajout à la liste d'installation" + packages_to_install+=("dconf-cli") + fi + + # Vérifier secret-tool + if ! command -v secret-tool &> /dev/null; then + print_info "secret-tool manquant - ajout à la liste d'installation" + packages_to_install+=("libsecret-tools") + fi + + # Vérifier seahorse (gestionnaire de trousseau graphique) + if ! command -v seahorse &> /dev/null; then + print_info "seahorse manquant - ajout à la liste d'installation" + packages_to_install+=("seahorse") + fi + + # Installer les paquets manquants + if [ ${#packages_to_install[@]} -gt 0 ]; then + print_info "Installation des paquets: ${packages_to_install[*]}" + + # Détecter le gestionnaire de paquets + if command -v apt &> /dev/null; then + sudo apt update && sudo apt install -y "${packages_to_install[@]}" + elif command -v dnf &> /dev/null; then + sudo dnf install -y "${packages_to_install[@]}" + elif command -v yum &> /dev/null; then + sudo yum install -y "${packages_to_install[@]}" + elif command -v pacman &> /dev/null; then + sudo pacman -S --noconfirm "${packages_to_install[@]}" + elif command -v zypper &> /dev/null; then + sudo zypper install -y "${packages_to_install[@]}" + else + print_error "Gestionnaire de paquets non supporté. Installez manuellement: ${packages_to_install[*]}" + exit 1 + fi + + if [ $? -eq 0 ]; then + print_success "Prérequis installés avec succès" + else + print_error "Erreur lors de l'installation des prérequis" + exit 1 + fi + else + print_success "Tous les prérequis sont déjà installés" + fi +} + +# Fonction pour vérifier les prérequis +check_requirements() { + print_info "Vérification des prérequis..." + + # Vérifier si GNOME est en cours d'exécution + if ! pgrep -x "gnome-shell" > /dev/null; then + print_warning "GNOME Shell ne semble pas être en cours d'exécution" + fi + + # Installer automatiquement les prérequis manquants + install_requirements + + print_success "Prérequis vérifiés et installés" +} + +# Fonction de sauvegarde +backup_accounts_network() { + print_info "Début de la sauvegarde des comptes et partages réseau GNOME..." + + # Créer le répertoire de sauvegarde + mkdir -p "$BACKUP_DIR" + + # Date de la sauvegarde + BACKUP_DATE=$(date +"%Y%m%d_%H%M%S") + BACKUP_BASE="$BACKUP_DIR/gnome-accounts-network-$BACKUP_DATE" + + # Créer un répertoire pour cette sauvegarde + mkdir -p "$BACKUP_BASE" + + # Sauvegarder GNOME Online Accounts (GOA) + print_info "Sauvegarde des comptes en ligne (GNOME Online Accounts)..." + if [ -d "$GOA_CONFIG_DIR" ]; then + cp -r "$GOA_CONFIG_DIR" "$BACKUP_BASE/goa-1.0" 2>/dev/null + if [ $? -eq 0 ]; then + print_success "Comptes en ligne sauvegardés" + else + print_warning "Erreur lors de la sauvegarde des comptes en ligne" + fi + else + print_warning "Répertoire GOA non trouvé: $GOA_CONFIG_DIR" + fi + + # Sauvegarder Evolution (comptes mail) + print_info "Sauvegarde des comptes Evolution (mail)..." + if [ -d "$EVOLUTION_CONFIG_DIR" ]; then + # Sauvegarder seulement les sources de données et la configuration + mkdir -p "$BACKUP_BASE/evolution" + if [ -d "$EVOLUTION_CONFIG_DIR/sources" ]; then + cp -r "$EVOLUTION_CONFIG_DIR/sources" "$BACKUP_BASE/evolution/" 2>/dev/null + fi + if [ -f "$EVOLUTION_CONFIG_DIR/evolution.conf" ]; then + cp "$EVOLUTION_CONFIG_DIR/evolution.conf" "$BACKUP_BASE/evolution/" 2>/dev/null + fi + # Copier les fichiers de configuration des comptes + find "$EVOLUTION_CONFIG_DIR" -name "*.source" -o -name "*.conf" | while read -r file; do + rel_path=$(realpath --relative-to="$EVOLUTION_CONFIG_DIR" "$file" 2>/dev/null || echo "$file") + mkdir -p "$BACKUP_BASE/evolution/$(dirname "$rel_path")" + cp "$file" "$BACKUP_BASE/evolution/$rel_path" 2>/dev/null + done + print_success "Configuration Evolution sauvegardée" + else + print_warning "Répertoire Evolution non trouvé: $EVOLUTION_CONFIG_DIR" + fi + + # Sauvegarder les paramètres dconf liés aux comptes + print_info "Sauvegarde des paramètres des comptes (dconf)..." + DCONF_ACCOUNTS="$BACKUP_BASE/accounts-settings.dconf" + { + dconf dump /org/gnome/online-accounts/ + dconf dump /org/gnome/evolution-data-server/ + dconf dump /org/gnome/evolution/ + dconf dump /org/gnome/settings-daemon/plugins/sharing/ + } > "$DCONF_ACCOUNTS" 2>/dev/null + + if [ -s "$DCONF_ACCOUNTS" ]; then + print_success "Paramètres des comptes sauvegardés" + else + print_warning "Aucun paramètre de compte à sauvegarder" + fi + + # Sauvegarder les connexions réseau (avec sudo si nécessaire) + print_info "Sauvegarde des connexions réseau..." + NETWORK_BACKUP="$BACKUP_BASE/network-connections" + mkdir -p "$NETWORK_BACKUP" + + # Connexions système (nécessite sudo) + if [ -d "$NETWORK_CONFIG_DIR" ] && sudo -n true 2>/dev/null; then + print_info "Sauvegarde des connexions système (avec sudo)..." + sudo cp -r "$NETWORK_CONFIG_DIR"/* "$NETWORK_BACKUP/" 2>/dev/null + if [ $? -eq 0 ]; then + sudo chown -R "$USER:$USER" "$NETWORK_BACKUP" + print_success "Connexions système sauvegardées" + fi + else + print_warning "Impossible de sauvegarder les connexions système (sudo requis ou non disponible)" + fi + + # Connexions utilisateur + if [ -d "$USER_NETWORK_CONFIG_DIR" ]; then + cp -r "$USER_NETWORK_CONFIG_DIR" "$BACKUP_BASE/user-network-config" 2>/dev/null + print_success "Configuration réseau utilisateur sauvegardée" + fi + + # Sauvegarder les partages réseau (dconf) + print_info "Sauvegarde des paramètres de partage réseau..." + DCONF_SHARING="$BACKUP_BASE/sharing-settings.dconf" + { + dconf dump /org/gnome/settings-daemon/plugins/sharing/ + dconf dump /org/gnome/desktop/file-sharing/ + dconf dump /org/gtk/settings/file-chooser/ + } > "$DCONF_SHARING" 2>/dev/null + + if [ -s "$DCONF_SHARING" ]; then + print_success "Paramètres de partage sauvegardés" + else + print_warning "Aucun paramètre de partage à sauvegarder" + fi + + # Sauvegarder la liste des signets de fichiers (lieux réseau) + print_info "Sauvegarde des signets de fichiers..." + BOOKMARKS_FILE="$HOME/.config/gtk-3.0/bookmarks" + if [ -f "$BOOKMARKS_FILE" ]; then + cp "$BOOKMARKS_FILE" "$BACKUP_BASE/gtk-bookmarks" 2>/dev/null + print_success "Signets de fichiers sauvegardés" + else + print_warning "Fichier de signets non trouvé" + fi + + # Sauvegarder le trousseau de clés COMPLET (ATTENTION: SENSIBLE!) + print_warning "ATTENTION: Sauvegarde des mots de passe du trousseau de clés..." + print_warning "Cette opération sauvegarde les mots de passe en texte quasi-lisible!" + print_warning "Protégez absolument ces fichiers de sauvegarde!" + + KEYRING_BACKUP="$BACKUP_BASE/keyring-passwords" + mkdir -p "$KEYRING_BACKUP" + + # Sauvegarder les trousseaux de clés physiques + if [ -d "$KEYRING_DIR" ]; then + print_info "Sauvegarde des fichiers de trousseau de clés..." + cp -r "$KEYRING_DIR" "$BACKUP_BASE/keyring-files" 2>/dev/null + if [ $? -eq 0 ]; then + print_success "Fichiers de trousseau copiés" + else + print_warning "Erreur lors de la copie des fichiers de trousseau" + fi + fi + + # Exporter les secrets avec secret-tool (si disponible) + if command -v secret-tool &> /dev/null; then + print_info "Export des mots de passe avec secret-tool..." + + # Créer un script d'export des secrets + SECRETS_EXPORT="$KEYRING_BACKUP/secrets-export.txt" + SECRETS_RESTORE="$KEYRING_BACKUP/restore-secrets.sh" + + { + echo "=== SECRETS EXPORTÉS (ATTENTION: SENSIBLE!) ===" + echo "Date: $(date)" + echo "Utilisateur: $USER" + echo "" + } > "$SECRETS_EXPORT" + + { + echo "#!/bin/bash" + echo "# Script de restauration des secrets" + echo "# ATTENTION: Ce fichier contient des mots de passe!" + echo "" + } > "$SECRETS_RESTORE" + chmod +x "$SECRETS_RESTORE" + + # Sauvegarder tous les WiFi avec leurs mots de passe + print_info "Sauvegarde des mots de passe WiFi..." + WIFI_PASSWORDS="$KEYRING_BACKUP/wifi-passwords.txt" + { + echo "=== MOTS DE PASSE WIFI ===" + echo "Date: $(date)" + echo "" + } > "$WIFI_PASSWORDS" + + # Lister toutes les connexions WiFi et extraire les mots de passe + if command -v nmcli &> /dev/null; then + nmcli -g NAME,TYPE connection show | grep ":802-11-wireless" | cut -d: -f1 | while read -r wifi_name; do + if [ -n "$wifi_name" ]; then + password=$(nmcli -g 802-11-wireless-security.psk connection show "$wifi_name" 2>/dev/null) + if [ -n "$password" ] && [ "$password" != "--" ]; then + echo "WiFi: $wifi_name" >> "$WIFI_PASSWORDS" + echo "Mot de passe: $password" >> "$WIFI_PASSWORDS" + echo "" >> "$WIFI_PASSWORDS" + + # Ajouter au script de restauration + echo "# Restauration WiFi: $wifi_name" >> "$SECRETS_RESTORE" + echo "nmcli connection modify \"$wifi_name\" 802-11-wireless-security.psk \"$password\" 2>/dev/null || true" >> "$SECRETS_RESTORE" + fi + fi + done + fi + + # Exporter les comptes en ligne avec tentative de récupération des tokens + print_info "Tentative d'export des tokens des comptes en ligne..." + GOA_SECRETS="$KEYRING_BACKUP/goa-secrets.txt" + { + echo "=== SECRETS DES COMPTES EN LIGNE ===" + echo "Date: $(date)" + echo "" + } > "$GOA_SECRETS" + + if [ -d "$GOA_CONFIG_DIR" ]; then + find "$GOA_CONFIG_DIR" -name "*.conf" | while read -r account_file; do + if [ -f "$account_file" ]; then + provider=$(grep "Provider=" "$account_file" 2>/dev/null | cut -d'=' -f2) + identity=$(grep "Identity=" "$account_file" 2>/dev/null | cut -d'=' -f2) + account_id=$(basename "$account_file" .conf) + + if [ -n "$provider" ] && [ -n "$identity" ]; then + echo "Compte: $provider - $identity" >> "$GOA_SECRETS" + echo "ID: $account_id" >> "$GOA_SECRETS" + + # Chercher les secrets associés + secret-tool search goa-identity "$identity" 2>/dev/null | while read -r line; do + if [[ "$line" == "secret = "* ]]; then + secret_value=$(echo "$line" | sed 's/^secret = //') + echo "Secret: $secret_value" >> "$GOA_SECRETS" + fi + done || true + echo "" >> "$GOA_SECRETS" + fi + fi + done + fi + + if [ -s "$SECRETS_EXPORT" ] || [ -s "$WIFI_PASSWORDS" ] || [ -s "$GOA_SECRETS" ]; then + print_success "Mots de passe sauvegardés" + print_warning "FICHIERS SENSIBLES créés dans $KEYRING_BACKUP" + else + print_warning "Aucun mot de passe récupéré automatiquement" + fi + fi + + # Créer une archive compressée + print_info "Création de l'archive compressée..." + ARCHIVE_FILE="$BACKUP_DIR/gnome-accounts-network-$BACKUP_DATE.tar.gz" + tar -czf "$ARCHIVE_FILE" -C "$BACKUP_DIR" "gnome-accounts-network-$BACKUP_DATE" 2>/dev/null + if [ $? -eq 0 ]; then + rm -rf "$BACKUP_BASE" # Supprimer le répertoire temporaire + print_success "Archive créée: $ARCHIVE_FILE" + else + print_error "Erreur lors de la création de l'archive" + fi + + # Créer un fichier de métadonnées + METADATA_FILE="$BACKUP_DIR/backup-metadata-$BACKUP_DATE.txt" + { + echo "=== SAUVEGARDE COMPTES ET RÉSEAU GNOME ===" + echo "Date: $(date)" + echo "Utilisateur: $USER" + echo "Version GNOME: $(gnome-shell --version 2>/dev/null || echo 'Non disponible')" + echo "Système: $(lsb_release -d 2>/dev/null | cut -f2 || uname -a)" + echo "NetworkManager: $(nmcli --version 2>/dev/null | head -n1 || echo 'Non disponible')" + echo "" + echo "Éléments sauvegardés:" + echo "- Comptes en ligne GNOME (GOA)" + echo "- Configuration Evolution (mail)" + echo "- Paramètres des comptes" + echo "- Connexions réseau" + echo "- Paramètres de partage" + echo "- Signets de fichiers" + echo "- MOTS DE PASSE (trousseau de clés)" + echo "- Mots de passe WiFi" + echo "" + echo "⚠️ ATTENTION: Fichiers de mots de passe inclus!" + echo "⚠️ Protégez absolument cette sauvegarde!" + echo "Archive: $(basename "$ARCHIVE_FILE")" + } > "$METADATA_FILE" + + print_success "Sauvegarde terminée! Fichiers dans: $BACKUP_DIR" + print_info "Métadonnées sauvegardées dans: $METADATA_FILE" +} + +# Fonction de restauration +restore_accounts_network() { + print_info "Restauration des comptes et partages réseau GNOME..." + + # Lister les sauvegardes disponibles + if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A "$BACKUP_DIR"/*.tar.gz 2>/dev/null)" ]; then + print_error "Aucune sauvegarde trouvée dans $BACKUP_DIR" + return + fi + + echo "Sauvegardes disponibles:" + select backup_file in "$BACKUP_DIR"/*.tar.gz; do + if [ -n "$backup_file" ]; then + break + else + print_error "Sélection invalide" + fi + done + + # Extraire la date de la sauvegarde sélectionnée + BACKUP_DATE=$(basename "$backup_file" | sed 's/gnome-accounts-network-\(.*\)\.tar\.gz/\1/') + + print_info "Restauration depuis: $(basename "$backup_file")" + + # Demander confirmation + echo "" + print_warning "ATTENTION: Cette opération va :" + print_warning "- Remplacer vos comptes et paramètres actuels" + print_warning "- Restaurer les mots de passe sauvegardés" + print_warning "- Il est recommandé de fermer Evolution et autres applications" + echo "" + read -p "Voulez-vous continuer avec la restauration? (y/N): " confirm + if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + print_info "Restauration annulée" + return + fi + + # Créer un répertoire temporaire pour l'extraction + TEMP_DIR=$(mktemp -d) + print_info "Extraction de l'archive..." + tar -xzf "$backup_file" -C "$TEMP_DIR" 2>/dev/null + if [ $? -ne 0 ]; then + print_error "Erreur lors de l'extraction de l'archive" + rm -rf "$TEMP_DIR" + return + fi + + RESTORE_DIR="$TEMP_DIR/gnome-accounts-network-$BACKUP_DATE" + + # Créer une sauvegarde de sécurité + print_info "Création d'une sauvegarde de sécurité..." + SAFETY_DATE=$(date +"%Y%m%d_%H%M%S") + SAFETY_BACKUP="$BACKUP_DIR/safety-backup-$SAFETY_DATE" + mkdir -p "$SAFETY_BACKUP" + + [ -d "$GOA_CONFIG_DIR" ] && cp -r "$GOA_CONFIG_DIR" "$SAFETY_BACKUP/goa-1.0-backup" 2>/dev/null + [ -d "$EVOLUTION_CONFIG_DIR" ] && cp -r "$EVOLUTION_CONFIG_DIR" "$SAFETY_BACKUP/evolution-backup" 2>/dev/null + print_success "Sauvegarde de sécurité créée: $SAFETY_BACKUP" + + # Restaurer GNOME Online Accounts + if [ -d "$RESTORE_DIR/goa-1.0" ]; then + print_info "Restauration des comptes en ligne..." + mkdir -p "$HOME/.config" + rm -rf "$GOA_CONFIG_DIR" 2>/dev/null + cp -r "$RESTORE_DIR/goa-1.0" "$GOA_CONFIG_DIR" 2>/dev/null + print_success "Comptes en ligne restaurés" + fi + + # Restaurer Evolution + if [ -d "$RESTORE_DIR/evolution" ]; then + print_info "Restauration de la configuration Evolution..." + mkdir -p "$EVOLUTION_CONFIG_DIR" + cp -r "$RESTORE_DIR/evolution"/* "$EVOLUTION_CONFIG_DIR/" 2>/dev/null + print_success "Configuration Evolution restaurée" + fi + + # Restaurer les paramètres des comptes + if [ -f "$RESTORE_DIR/accounts-settings.dconf" ] && [ -s "$RESTORE_DIR/accounts-settings.dconf" ]; then + print_info "Restauration des paramètres des comptes..." + dconf load / < "$RESTORE_DIR/accounts-settings.dconf" 2>/dev/null + print_success "Paramètres des comptes restaurés" + fi + + # Restaurer les connexions réseau + if [ -d "$RESTORE_DIR/network-connections" ]; then + print_info "Restauration des connexions réseau..." + if sudo -n true 2>/dev/null; then + sudo cp -r "$RESTORE_DIR/network-connections"/* "$NETWORK_CONFIG_DIR/" 2>/dev/null + sudo systemctl reload NetworkManager 2>/dev/null + print_success "Connexions réseau restaurées" + else + print_warning "Sudo requis pour restaurer les connexions système - ignoré" + fi + fi + + # Restaurer la configuration réseau utilisateur + if [ -d "$RESTORE_DIR/user-network-config" ]; then + print_info "Restauration de la configuration réseau utilisateur..." + mkdir -p "$HOME/.config" + cp -r "$RESTORE_DIR/user-network-config" "$USER_NETWORK_CONFIG_DIR" 2>/dev/null + print_success "Configuration réseau utilisateur restaurée" + fi + + # Restaurer les paramètres de partage + if [ -f "$RESTORE_DIR/sharing-settings.dconf" ] && [ -s "$RESTORE_DIR/sharing-settings.dconf" ]; then + print_info "Restauration des paramètres de partage..." + dconf load / < "$RESTORE_DIR/sharing-settings.dconf" 2>/dev/null + print_success "Paramètres de partage restaurés" + fi + + # Restaurer les trousseaux de clés et mots de passe + if [ -d "$RESTORE_DIR/keyring-files" ]; then + print_warning "ATTENTION: Restauration des trousseaux de clés avec mots de passe!" + read -p "Restaurer les mots de passe sauvegardés? (y/N): " restore_passwords + if [[ "$restore_passwords" =~ ^[Yy]$ ]]; then + print_info "Restauration des fichiers de trousseau..." + + # Sauvegarder les trousseaux actuels + [ -d "$KEYRING_DIR" ] && cp -r "$KEYRING_DIR" "$SAFETY_BACKUP/keyring-backup" 2>/dev/null + + # Restaurer les trousseaux + mkdir -p "$HOME/.local/share" + rm -rf "$KEYRING_DIR" 2>/dev/null + cp -r "$RESTORE_DIR/keyring-files/keyrings" "$KEYRING_DIR" 2>/dev/null + + print_success "Trousseaux de clés restaurés" + + # Restaurer les mots de passe WiFi + if [ -f "$RESTORE_DIR/keyring-passwords/restore-secrets.sh" ]; then + print_info "Exécution du script de restauration des secrets..." + bash "$RESTORE_DIR/keyring-passwords/restore-secrets.sh" 2>/dev/null + print_success "Script de restauration exécuté" + fi + + # Redémarrer le démon gnome-keyring si possible + if pgrep -x "gnome-keyring-daemon" > /dev/null; then + print_info "Redémarrage du démon gnome-keyring..." + pkill -f gnome-keyring-daemon 2>/dev/null + sleep 2 + gnome-keyring-daemon --start --components=secrets,ssh,gpg 2>/dev/null & + print_success "Démon gnome-keyring redémarré" + fi + else + print_info "Restauration des mots de passe ignorée" + fi + fi + + # Restaurer les signets + if [ -f "$RESTORE_DIR/gtk-bookmarks" ]; then + print_info "Restauration des signets de fichiers..." + mkdir -p "$HOME/.config/gtk-3.0" + cp "$RESTORE_DIR/gtk-bookmarks" "$HOME/.config/gtk-3.0/bookmarks" 2>/dev/null + print_success "Signets de fichiers restaurés" + fi + + # Nettoyer + rm -rf "$TEMP_DIR" + + print_success "Restauration terminée!" + print_warning "Actions recommandées :" + print_warning "1. Redémarrez votre session complètement (déconnexion/reconnexion)" + print_warning "2. Vérifiez vos comptes dans Paramètres > Comptes en ligne" + print_warning "3. Testez vos connexions WiFi" + print_warning "4. Relancez Evolution si vous l'utilisez" + print_warning "5. Si les mots de passe ne fonctionnent pas, vérifiez les fichiers dans keyring-passwords/" +} + +# Fonction pour lister les sauvegardes +list_backups() { + print_info "Sauvegardes disponibles:" + + if [ ! -d "$BACKUP_DIR" ]; then + print_warning "Répertoire de sauvegarde non trouvé: $BACKUP_DIR" + return + fi + + for backup in "$BACKUP_DIR"/gnome-accounts-network-*.tar.gz; do + if [ -f "$backup" ]; then + filename=$(basename "$backup") + date_part=$(echo "$filename" | sed 's/gnome-accounts-network-\(.*\)\.tar\.gz/\1/') + readable_date=$(echo "$date_part" | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)_\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\3\/\2\/\1 \4:\5:\6/') + size=$(du -h "$backup" | cut -f1) + echo " - $filename (Taille: $size, Date: $readable_date)" + + # Vérifier les fichiers associés + metadata_file="$BACKUP_DIR/backup-metadata-$date_part.txt" + if [ -f "$metadata_file" ]; then + echo " └── Métadonnées disponibles" + fi + fi + done + + if [ -z "$(ls -A "$BACKUP_DIR"/gnome-accounts-network-*.tar.gz 2>/dev/null)" ]; then + print_warning "Aucune sauvegarde trouvée" + fi +} + +# Fonction pour nettoyer les anciennes sauvegardes +cleanup_backups() { + print_info "Nettoyage des anciennes sauvegardes..." + + if [ ! -d "$BACKUP_DIR" ]; then + print_warning "Répertoire de sauvegarde non trouvé" + return + fi + + read -p "Combien de sauvegardes souhaitez-vous conserver? (défaut: 3): " keep_count + keep_count=${keep_count:-3} + + # Supprimer les anciennes sauvegardes (garder les plus récentes) + ls -t "$BACKUP_DIR"/gnome-accounts-network-*.tar.gz 2>/dev/null | tail -n +$((keep_count + 1)) | while read -r old_backup; do + if [ -f "$old_backup" ]; then + date_part=$(basename "$old_backup" | sed 's/gnome-accounts-network-\(.*\)\.tar\.gz/\1/') + print_info "Suppression de $(basename "$old_backup")" + rm -f "$old_backup" + rm -f "$BACKUP_DIR/backup-metadata-$date_part.txt" + rm -rf "$BACKUP_DIR/safety-backup-"* 2>/dev/null + fi + done + + print_success "Nettoyage terminé" +} + +# Fonction pour afficher les informations sur les comptes actuels +show_accounts_info() { + print_info "Informations sur les comptes et connexions actuels:" + echo "" + + # Comptes en ligne GNOME + if [ -d "$GOA_CONFIG_DIR" ]; then + echo "📧 Comptes en ligne GNOME:" + find "$GOA_CONFIG_DIR" -name "*.conf" | while read -r account_file; do + if [ -f "$account_file" ]; then + provider=$(grep "Provider=" "$account_file" 2>/dev/null | cut -d'=' -f2) + identity=$(grep "Identity=" "$account_file" 2>/dev/null | cut -d'=' -f2) + [ -n "$provider" ] && echo " - $provider: $identity" + fi + done + echo "" + fi + + # Connexions réseau + if command -v nmcli &> /dev/null; then + echo "🌐 Connexions réseau configurées:" + nmcli connection show 2>/dev/null | tail -n +2 | while read -r line; do + name=$(echo "$line" | awk '{print $1}') + type=$(echo "$line" | awk '{print $3}') + [ -n "$name" ] && echo " - $name ($type)" + done + echo "" + fi + + # Signets de fichiers + if [ -f "$HOME/.config/gtk-3.0/bookmarks" ]; then + echo "📁 Signets de fichiers/réseau:" + grep -E "(smb://|ftp://|sftp://)" "$HOME/.config/gtk-3.0/bookmarks" 2>/dev/null | while read -r bookmark; do + url=$(echo "$bookmark" | awk '{print $1}') + name=$(echo "$bookmark" | cut -d' ' -f2-) + [ -n "$url" ] && echo " - $name ($url)" + done + echo "" + fi +} + +# Fonction d'aide +show_help() { + echo "Script de sauvegarde et restauration des comptes et partages réseau GNOME" + echo "" + echo "Ce script sauvegarde et restaure :" + echo " • Comptes en ligne GNOME (Google, Microsoft, Nextcloud, etc.)" + echo " • Configuration Evolution (comptes mail)" + echo " • Connexions réseau WiFi/Ethernet" + echo " • Paramètres de partage réseau" + echo " • Signets de fichiers réseau" + echo "" + echo "Usage: $0 [OPTION]" + echo "" + echo "Options:" + echo " backup, -b Sauvegarder les comptes et réseau" + echo " restore, -r Restaurer les comptes et réseau" + echo " list, -l Lister les sauvegardes disponibles" + echo " cleanup, -c Nettoyer les anciennes sauvegardes" + echo " info, -i Afficher les comptes/connexions actuels" + echo " help, -h Afficher cette aide" + echo "" + echo "IMPORTANT:" + echo " ⚠️ Les mots de passe SONT sauvegardés (non sécurisé)" + echo " ⚠️ Protégez absolument vos fichiers de sauvegarde" + echo " ⚠️ Ne partagez jamais ces sauvegardes" + echo " • Sudo peut être requis pour les connexions système" + echo "" + echo "Répertoire de sauvegarde: $BACKUP_DIR" +} + +# Fonction pour afficher le menu principal +show_menu() { + echo "" + echo "==================================================" + echo " Script de gestion des comptes et réseau GNOME" + echo "==================================================" + echo "" + echo "Choisissez une action:" + echo "1) Sauvegarder les comptes et réseau" + echo "2) Restaurer les comptes et réseau" + echo "3) Lister les sauvegardes" + echo "4) Nettoyer les anciennes sauvegardes" + echo "5) Afficher les comptes/connexions actuels" + echo "6) Afficher l'aide" + echo "7) Quitter" + echo "" +} + +# Fonction pour demander de continuer +ask_continue() { + echo "" + echo "==================================================" + read -p "Appuyez sur Entrée pour revenir au menu principal..." + echo "" +} + +# Boucle principale interactive +interactive_menu() { + while true; do + show_menu + read -p "Votre choix (1-7): " choice + + case $choice in + 1) + check_requirements && backup_accounts_network + ask_continue + ;; + 2) + check_requirements && restore_accounts_network + ask_continue + ;; + 3) + list_backups + ask_continue + ;; + 4) + cleanup_backups + ask_continue + ;; + 5) + show_accounts_info + ask_continue + ;; + 6) + show_help + ask_continue + ;; + 7) + print_info "Au revoir!" + exit 0 + ;; + *) + print_error "Choix invalide" + sleep 1 + ;; + esac + done +} + +# Programme principal +main() { + case "${1:-}" in + backup|-b) + check_requirements + backup_accounts_network + ;; + restore|-r) + check_requirements + restore_accounts_network + ;; + list|-l) + list_backups + ;; + cleanup|-c) + cleanup_backups + ;; + info|-i) + show_accounts_info + ;; + help|-h|--help) + show_help + ;; + *) + # Mode interactif par défaut + interactive_menu + ;; + esac +} + +main "$@" \ No newline at end of file