#!/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 "$@"