From 74bfce42dcbb98b01add3e253fef15c8eeb56d5f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 14 Oct 2016 14:13:14 +0100 Subject: [PATCH] Improve restore functions --- src/freedombone-controlpanel | 196 ++++++++++++++++++----------------- 1 file changed, 99 insertions(+), 97 deletions(-) diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index 631ccc24..6a498ad2 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -965,17 +965,62 @@ function backup_data { any_key } -function restore_from_usb { +function restore_data_from_storage { + restore_type="$1" + + restore_command="${PROJECT_NAME}-restore-local $USB_DRIVE" + if [[ $restore_type != "local" ]]; then + restore_command="${PROJECT_NAME}-restore-remote $remote_domain_name configuration;;" + else + remote_domain_name="$1" + restore_command="${PROJECT_NAME}-restore-remote $remote_domain_name" + fi + + utils_installed=(configuration + mariadb + letsencrypt + mutt + gpg + procmail + spamassassin + readme + ssh + userconfig + userlocal + userfin + certs + personal) + detect_apps - applist="all" + + app_list=() + AllStr=$"all" n=1 + applist="$n $AllStr off" + n=$[n+1] + + util_index=0 + for a in "${utils_installed[@]}" + do + applist="$applist $n $a off" + app_name=${utils_installed[util_index]} + n=$[n+1] + util_index=$[util_index+1] + app_list+=("$app_name") + done + app_index=0 for a in "${APPS_INSTALLED_NAMES[@]}" do applist="$applist $n $a off" n=$[n+1] app_index=$[app_index+1] + app_name=${APPS_INSTALLED_NAMES[app_index]} + app_list+=("$app_name") done + ExitStr=$"Exit" + applist="$applist $n $ExitStr on" + n=$[n+1] choices=$(dialog --stdout --backtitle $"Freedombone" \ --title $"Restore apps" \ @@ -984,16 +1029,52 @@ function restore_from_usb { if [ $? -eq 0 ]; then clear + + # Test for exit + for choice in $choices + do + app_index=$[choice-1] + app_name=${app_list[app_index]} + if [[ $app_name == "$ExitStr" ]]; then + return + fi + done + + # Test for restoring all apps + for choice in $choices + do + app_index=$[choice-1] + app_name=${app_list[app_index]} + if [[ $app_name == "$AllStr" ]]; then + $restore_command + if [ ! "$?" = "0" ]; then + if [[ "$1" == "local" ]]; then + dialog --title $"Restore all apps from USB" \ + --msgbox $"Restore failed with code $?" 6 40 + else + dialog --title $"Restore all apps from $1" \ + --msgbox $"Restore failed with code $?" 6 40 + fi + return + fi + + if [[ "$1" == "local" ]]; then + dialog --title $"Restore all apps from USB" \ + --msgbox $"Restore complete" 6 40 + else + dialog --title $"Restore all apps from $1" \ + --msgbox $"Restore complete" 6 40 + fi + return + fi + done + ctr=0 for choice in $choices do app_index=$[choice-1] - app_name=${APPS_INSTALLED_NAMES[app_index]} - if [[ "${app_name}" == 'all' ]]; then - ${PROJECT_NAME}-restore-local $USB_DRIVE - else - ${PROJECT_NAME}-restore-local $USB_DRIVE "${app_name}" - fi + app_name=${app_list[app_index]} + $restore_command "${app_name}" if [ ! "$?" = "0" ]; then dialog --title $"Restore apps from USB" \ --msgbox $"Restore of ${app_name} failed with code $?" 6 40 @@ -1002,95 +1083,16 @@ function restore_from_usb { ctr=$((ctr + 1)) done if [ $ctr -gt 0 ]; then - dialog --title $"Restore apps from USB" \ - --msgbox $"Restore complete" 6 40 + if [[ "$1" == "local" ]]; then + dialog --title $"Restore apps from USB" \ + --msgbox $"Restore complete" 6 40 + else + dialog --title $"Restore apps from $1" \ + --msgbox $"Restore complete" 6 40 + fi + return fi fi -} - -function restore_from_remote { - remote_domain_name=$1 - - while true - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Control Panel" \ - --title $"Restore from ${remote_domain_name}" \ - --radiolist $"Choose an application to restore:" 31 70 28 \ - 1 $"Everything" off \ - 2 $"Return to the backup and restore menu" on \ - 3 $"Configuration files" off \ - 4 $"MariaDB settings" off \ - 5 $"Let's Encrypt account" off \ - 6 $"Mutt email client settings" off \ - 7 $"GPG keys" off \ - 8 $"Email processing rules" off \ - 9 $"Spam filtering rules" off \ - 10 $"Administrator's README file" off \ - 11 $"IPFS" off \ - 12 $"SSH keys" off \ - 13 $"User configuration files" off \ - 14 $"User local files" off \ - 15 $"User fin files" off \ - 16 $"SSL/TLS certificates" off \ - 17 $"Personal settings" off \ - 18 $"Mailing List" off \ - 19 $"XMPP chat" off \ - 20 $"GNU Social" off \ - 21 $"Hubzilla" off \ - 22 $"Syncthing" off \ - 23 $"Gogs" off \ - 24 $"Wiki" off \ - 25 $"Blog" off \ - 26 $"Email" off \ - 27 $"DLNA" off \ - 28 $"Mumble" off \ - 29 $"RSS reader" off \ - 30 $"Tox" off 2> $data - sel=$? - case $sel in - 1) break;; - 255) break;; - esac - - if [ $(cat $data) -ne 2 ]; then - clear - fi - - case $(cat $data) in - 1) ${PROJECT_NAME}-restore-remote $remote_domain_name;; - 2) return;; - 3) ${PROJECT_NAME}-restore-remote $remote_domain_name configuration;; - 4) ${PROJECT_NAME}-restore-remote $remote_domain_name mariadb;; - 5) ${PROJECT_NAME}-restore-remote $remote_domain_name letsencrypt;; - 6) ${PROJECT_NAME}-restore-remote $remote_domain_name mutt;; - 7) ${PROJECT_NAME}-restore-remote $remote_domain_name gpg;; - 8) ${PROJECT_NAME}-restore-remote $remote_domain_name procmail;; - 9) ${PROJECT_NAME}-restore-remote $remote_domain_name spamassassin;; - 10) ${PROJECT_NAME}-restore-remote $remote_domain_name readme;; - 11) ${PROJECT_NAME}-restore-remote $remote_domain_name ipfs;; - 12) ${PROJECT_NAME}-restore-remote $remote_domain_name ssh;; - 13) ${PROJECT_NAME}-restore-remote $remote_domain_name userconfig;; - 14) ${PROJECT_NAME}-restore-remote $remote_domain_name userlocal;; - 15) ${PROJECT_NAME}-restore-remote $remote_domain_name userfin;; - 16) ${PROJECT_NAME}-restore-remote $remote_domain_name certs;; - 17) ${PROJECT_NAME}-restore-remote $remote_domain_name personal;; - 18) ${PROJECT_NAME}-restore-remote $remote_domain_name mailinglist;; - 19) ${PROJECT_NAME}-restore-remote $remote_domain_name xmpp;; - 20) ${PROJECT_NAME}-restore-remote $remote_domain_name gnusocial;; - 21) ${PROJECT_NAME}-restore-remote $remote_domain_name hubzilla;; - 22) ${PROJECT_NAME}-restore-remote $remote_domain_name syncthing;; - 23) ${PROJECT_NAME}-restore-remote $remote_domain_name gogs;; - 24) ${PROJECT_NAME}-restore-remote $remote_domain_name wiki;; - 25) ${PROJECT_NAME}-restore-remote $remote_domain_name blog;; - 26) ${PROJECT_NAME}-restore-remote $remote_domain_name email;; - 27) ${PROJECT_NAME}-restore-remote $remote_domain_name dlna;; - 28) ${PROJECT_NAME}-restore-remote $remote_domain_name mumble;; - 29) ${PROJECT_NAME}-restore-remote $remote_domain_name ttrss;; - 30) ${PROJECT_NAME}-restore-remote $remote_domain_name tox;; - esac - done any_key } @@ -1100,7 +1102,7 @@ function restore_data { clear echo ' ' echo $'Enter the passphrase for your LUKS encrypted backup drive:' - restore_from_usb + restore_data_from_storage local } function restore_data_remote { @@ -1129,7 +1131,7 @@ function restore_data_remote { return fi - restore_from_remote $friend_server_domain_name + restore_data_from_storage $friend_server_domain_name ;; esac }