From ec1ecf577bebdd17a993cfc18f8d7261253adb56 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@robotics.uk.to>
Date: Sun, 10 Jul 2016 15:11:53 +0100
Subject: [PATCH] Consolidation of backup functions

---
 src/freedombone-app-sip        |   1 +
 src/freedombone-restore-local  | 101 +------------------
 src/freedombone-restore-remote |  89 +----------------
 src/freedombone-utils-backup   | 174 +++++++++++++++++++++++++++++++++
 4 files changed, 178 insertions(+), 187 deletions(-)

diff --git a/src/freedombone-app-sip b/src/freedombone-app-sip
index 7cfbe9277..aef1c4220 100755
--- a/src/freedombone-app-sip
+++ b/src/freedombone-app-sip
@@ -77,6 +77,7 @@ function restore_local_sip {
 		fi
 		rm -rf $temp_restore_dir
 		service sipwitch restart
+		echo $"Restore of SIP settings complete"
 	fi
 }
 
diff --git a/src/freedombone-restore-local b/src/freedombone-restore-local
index fede2ff31..e7f6ad613 100755
--- a/src/freedombone-restore-local
+++ b/src/freedombone-restore-local
@@ -100,83 +100,6 @@ function restore_directory_from_usb {
 	obnam restore -r $USB_MOUNT/backup/${2} --to ${1}
 }
 
-function restore_database {
-	RESTORE_SUBDIR="root"
-
-	if [ -d $USB_MOUNT/backup/${1} ]; then
-		echo $"Restoring ${1} database"
-		restore_directory_from_usb "/root/temp${1}data" "${1}data"
-		if [ ! -f /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql ]; then
-			echo $"Unable to restore ${1} database"
-			rm -rf /root/temp${1}data
-			set_user_permissions
-			backup_unmount_drive
-			exit 503
-		fi
-		mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD ${1} -o < /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
-		if [ ! "$?" = "0" ]; then
-			echo "$mysqlsuccess"
-			set_user_permissions
-			backup_unmount_drive
-			exit 964
-		fi
-		shred -zu /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/*
-		rm -rf /root/temp${1}data
-		echo $"Restoring ${1} installation"
-		if [ ! -d /root/temp${1} ]; then
-			mkdir /root/temp${1}
-		fi
-		restore_directory_from_usb "/root/temp${1}" "${1}"
-		RESTORE_SUBDIR="var"
-		if [ ${2} ]; then
-			# special handline of ttrss
-			if [[ ${2} == "ttrss" ]]; then
-				if [ -d /etc/share/tt-rss ]; then
-					if [ -d /root/temp${1}/etc/share/tt-rss ]; then
-						rm -rf /etc/share/tt-rss
-						mv /root/temp${1}/etc/share/tt-rss /etc/share/
-						if [ ! "$?" = "0" ]; then
-							set_user_permissions
-							backup_unmount_drive
-							exit 528
-						fi
-						if [ -d /etc/letsencrypt/live/${2} ]; then
-							ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
-							ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
-						else
-							# Ensure that the bundled SSL cert is being used
-							if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
-								sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
-							fi
-						fi
-					fi
-				fi
-			fi
-
-			if [ -d /var/www/${2}/htdocs ]; then
-				if [ -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then
-					rm -rf /var/www/${2}/htdocs
-					mv /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs /var/www/${2}/
-					if [ ! "$?" = "0" ]; then
-						set_user_permissions
-						backup_unmount_drive
-						exit 683
-					fi
-					if [ -d /etc/letsencrypt/live/${2} ]; then
-						ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
-						ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
-					else
-						# Ensure that the bundled SSL cert is being used
-						if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
-							sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
-						fi
-					fi
-				fi
-			fi
-		fi
-	fi
-}
-
 function restore_configuration {
 	if [[ $RESTORE_APP != 'all' ]]; then
 		if [[ $RESTORE_APP != 'configuration' ]]; then
@@ -771,28 +694,6 @@ function get_restore_app {
 	fi
 }
 
-function restore_apps {
-	FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*
-
-	APPS_COMPLETED=()
-
-	# for all the app scripts
-	for filename in $FILES
-	do
-		app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
-		if [[ $RESTORE_APP == 'all' || $RESTORE_APP == "${app_name}"  ]]; then
-			if [[ $(item_in_array ${app_name} ${APPS_COMPLETED[@]}) != 0 ]]; then
-				function_check app_is_installed
-				if [[ "$(app_is_installed $a)" == "1" ]]; then
-					APPS_COMPLETED+=("${app_name}")
-					function_check restore_local_${app_name}
-					restore_local_${app_name}
-				fi
-			fi
-		fi
-	done
-}
-
 get_restore_app ${2}
 backup_mount_drive ${1} ${ADMIN_USERNAME} ${2}
 check_backup_exists
@@ -817,7 +718,7 @@ restore_certs
 restore_personal_settings
 restore_mailing_list
 restore_email
-restore_apps
+restore_apps local
 set_user_permissions
 backup_unmount_drive
 
diff --git a/src/freedombone-restore-remote b/src/freedombone-restore-remote
index f3b8ffbe3..fcb4d5a2f 100755
--- a/src/freedombone-restore-remote
+++ b/src/freedombone-restore-remote
@@ -105,72 +105,6 @@ function copy_gpg_keys {
 	cp -r /home/$ADMIN_USERNAME/.gnupg /root
 }
 
-function restore_database_from_friend {
-	DATABASE_PASSWORD=
-	RESTORE_SUBDIR="root"
-
-	if [ -d $SERVER_DIRECTORY/backup/${1} ]; then
-		echo $"Restoring ${1} database"
-		restore_directory_from_friend /root/temp${1}data ${1}data
-		if [ ! -f /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql ]; then
-			echo $"Unable to restore ${1} database"
-			rm -rf /root/temp${1}data
-			exit 503
-		fi
-		mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${1} -o < /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
-		if [ ! "$?" = "0" ]; then
-			echo "$mysqlsuccess"
-			exit 964
-		fi
-		shred -zu /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/*
-		rm -rf /root/temp${1}data
-		echo $"Restoring ${1} installation"
-		restore_directory_from_friend /root/temp${1} ${1}
-		RESTORE_SUBDIR="var"
-		if [ ${1} ]; then
-
-			# special handling of ttrss
-			if [[ ${2} == "ttrss" ]]; then
-				if [ -d /etc/share/tt-rss ]; then
-					rm -rf /etc/share/tt-rss
-					mv /root/temp${1}/etc/share/tt-rss /etc/share/
-					if [ ! "$?" = "0" ]; then
-						exit 639
-					fi
-					if [ -d /etc/letsencrypt/live/${2} ]; then
-						ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
-						ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
-					else
-						# Ensure that the bundled SSL cert is being used
-						if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
-							sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
-						fi
-					fi
-				fi
-			fi
-
-			if [ -d /var/www/${2}/htdocs ]; then
-				if [ -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then
-					rm -rf /var/www/${2}/htdocs
-					mv /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs /var/www/${2}/
-					if [ ! "$?" = "0" ]; then
-						exit 683
-					fi
-					if [ -d /etc/letsencrypt/live/${2} ]; then
-						ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
-						ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
-					else
-						# Ensure that the bundled SSL cert is being used
-						if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
-							sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
-						fi
-					fi
-				fi
-			fi
-		fi
-	fi
-}
-
 function restore_configuration {
 	if [[ $RESTORE_APP != 'all' ]]; then
 		if [[ $RESTORE_APP != 'configuration' ]]; then
@@ -695,26 +629,6 @@ function restore_email {
 	done
 }
 
-function restore_dlna {
-	if [[ $RESTORE_APP != 'all' ]]; then
-		if [[ $RESTORE_APP != 'dlna' ]]; then
-			return
-		fi
-	fi
-	if [ -d /var/cache/minidlna ]; then
-		if [ -d $SERVER_DIRECTORY/backup/dlna ]; then
-			echo $"Restoring DLNA cache"
-			temp_restore_dir=/root/tempdlna
-			restore_directory_from_friend $temp_restore_dir dlna
-			cp -r $temp_restore_dir/var/cache/minidlna/* /var/cache/minidlna/
-			if [ ! "$?" = "0" ]; then
-				exit 982
-			fi
-			rm -rf $temp_restore_dir
-		fi
-	fi
-}
-
 # Social key management
 # Recover any key fragments and reconstruct the gpg key
 ${PROJECT_NAME}-recoverkey -u ${ADMIN_USERNAME} -l $BACKUP_LIST
@@ -737,7 +651,8 @@ restore_certs
 restore_personal_settings
 restore_mailing_list
 restore_email
-#restore_apps remote
+restore_apps remote
+set_user_permissions
 
 echo $"*** Remote restore was successful ***"
 
diff --git a/src/freedombone-utils-backup b/src/freedombone-utils-backup
index 30590ef26..d0f9847da 100755
--- a/src/freedombone-utils-backup
+++ b/src/freedombone-utils-backup
@@ -382,4 +382,178 @@ function backup_apps {
 	done
 }
 
+function restore_apps {
+	localremote=$1
+	FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*
+
+	RESTORE_APPS_COMPLETED=()
+
+	# for all the app scripts
+	for filename in $FILES
+	do
+		app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
+		if [[ $RESTORE_APP == 'all' || $RESTORE_APP == "${app_name}"  ]]; then
+			if [[ $(item_in_array ${app_name} ${RESTORE_APPS_COMPLETED[@]}) != 0 ]]; then
+				function_check app_is_installed
+				if [[ "$(app_is_installed $a)" == "1" ]]; then
+					RESTORE_APPS_COMPLETED+=("${app_name}")
+					function_check restore_${localremote}_${app_name}
+					restore_${localremote}_${app_name}
+				fi
+			fi
+		fi
+	done
+}
+
+function restore_database_from_friend {
+	DATABASE_PASSWORD=
+	RESTORE_SUBDIR="root"
+
+	if [ -d $SERVER_DIRECTORY/backup/${1} ]; then
+		echo $"Restoring ${1} database"
+		restore_directory_from_friend /root/temp${1}data ${1}data
+		if [ ! -f /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql ]; then
+			echo $"Unable to restore ${1} database"
+			rm -rf /root/temp${1}data
+			exit 503
+		fi
+		mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${1} -o < /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
+		if [ ! "$?" = "0" ]; then
+			echo "$mysqlsuccess"
+			exit 964
+		fi
+		shred -zu /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/*
+		rm -rf /root/temp${1}data
+		echo $"Restoring ${1} installation"
+		restore_directory_from_friend /root/temp${1} ${1}
+		RESTORE_SUBDIR="var"
+		if [ ${1} ]; then
+
+			# special handling of ttrss
+			if [[ ${2} == "ttrss" ]]; then
+				if [ -d /etc/share/tt-rss ]; then
+					rm -rf /etc/share/tt-rss
+					mv /root/temp${1}/etc/share/tt-rss /etc/share/
+					if [ ! "$?" = "0" ]; then
+						exit 639
+					fi
+					if [ -d /etc/letsencrypt/live/${2} ]; then
+						ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
+						ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
+					else
+						# Ensure that the bundled SSL cert is being used
+						if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
+							sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
+						fi
+					fi
+				fi
+			fi
+
+			if [ -d /var/www/${2}/htdocs ]; then
+				if [ -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then
+					rm -rf /var/www/${2}/htdocs
+					mv /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs /var/www/${2}/
+					if [ ! "$?" = "0" ]; then
+						exit 683
+					fi
+					if [ -d /etc/letsencrypt/live/${2} ]; then
+						ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
+						ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
+					else
+						# Ensure that the bundled SSL cert is being used
+						if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
+							sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
+						fi
+					fi
+				fi
+			fi
+		fi
+	fi
+}
+
+function restore_database {
+	RESTORE_SUBDIR="root"
+
+	if [ -d $USB_MOUNT/backup/${1} ]; then
+		echo $"Restoring ${1} database"
+		function_check restore_directory_from_usb
+		restore_directory_from_usb "/root/temp${1}data" "${1}data"
+		if [ ! -f /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql ]; then
+			echo $"Unable to restore ${1} database"
+			rm -rf /root/temp${1}data
+			function_check set_user_permissions
+			set_user_permissions
+			function_check backup_unmount_drive
+			backup_unmount_drive
+			exit 503
+		fi
+		mysqlsuccess=$(mysql -u root --password=$DATABASE_PASSWORD ${1} -o < /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/${1}.sql)
+		if [ ! "$?" = "0" ]; then
+			echo "$mysqlsuccess"
+			function_check set_user_permissions
+			set_user_permissions
+			function_check set_user_permissions
+			backup_unmount_drive
+			exit 964
+		fi
+		shred -zu /root/temp${1}data/${RESTORE_SUBDIR}/temp${1}data/*
+		rm -rf /root/temp${1}data
+		echo $"Restoring ${1} installation"
+		if [ ! -d /root/temp${1} ]; then
+			mkdir /root/temp${1}
+		fi
+		function_check restore_directory_from_usb
+		restore_directory_from_usb "/root/temp${1}" "${1}"
+		RESTORE_SUBDIR="var"
+		if [ ${2} ]; then
+			# special handline of ttrss
+			if [[ ${2} == "ttrss" ]]; then
+				if [ -d /etc/share/tt-rss ]; then
+					if [ -d /root/temp${1}/etc/share/tt-rss ]; then
+						rm -rf /etc/share/tt-rss
+						mv /root/temp${1}/etc/share/tt-rss /etc/share/
+						if [ ! "$?" = "0" ]; then
+							function_check set_user_permissions
+							set_user_permissions
+							function_check backup_unmount_drive
+							backup_unmount_drive
+							exit 528
+						fi
+						if [ -d /etc/letsencrypt/live/${2} ]; then
+							ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
+							ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
+						else
+							# Ensure that the bundled SSL cert is being used
+							if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
+								sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
+							fi
+						fi
+					fi
+				fi
+			fi
+
+			if [ -d /var/www/${2}/htdocs ]; then
+				if [ -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then
+					rm -rf /var/www/${2}/htdocs
+					mv /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs /var/www/${2}/
+					if [ ! "$?" = "0" ]; then
+						set_user_permissions
+						backup_unmount_drive
+						exit 683
+					fi
+					if [ -d /etc/letsencrypt/live/${2} ]; then
+						ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
+						ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
+					else
+						# Ensure that the bundled SSL cert is being used
+						if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
+							sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
+						fi
+					fi
+				fi
+			fi
+		fi
+	fi
+}
+
 # NOTE: deliberately no exit 0
-- 
GitLab