Implement Nextcloud backups (optional) (#2354)

* Implement Nextcloud backups (optional)
* Add menu option for Nextcloud backups
* Create backup directory automatically
* Fix potential issue with url substitution
* Remove unused variable
* Ectract actions to functions with scoped vars
This commit is contained in:
Igor Bubelov 2021-09-14 22:36:54 +07:00 committed by GitHub
parent e7e4b003d7
commit ca69e4c5ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 142 additions and 0 deletions

View file

@ -32,6 +32,10 @@ echo "# map dropboxbackup to on/off"
DropboxBackup="off"
if [ ${#dropboxBackupTarget} -gt 0 ]; then DropboxBackup="on"; fi
echo "map nextcloudbackup to on/off"
NextcloudBackup="off"
if [ $nextcloudBackupServer ] && [ $nextcloudBackupUser ] && [ $nextcloudBackupPassword ]; then NextcloudBackup="on"; fi
echo "# map localbackup to on/off"
LocalBackup="off"
if [ ${#localBackupDeviceUUID} -gt 0 ] && [ "${localBackupDeviceUUID}" != "off" ]; then LocalBackup="on"; fi
@ -110,6 +114,7 @@ if [ "${lndNode}" == "on" ]; then
OPTIONS+=(k '-LND Accept Keysend' ${keysend})
OPTIONS+=(c '-LND Circuitbreaker (firewall)' ${circuitbreaker})
OPTIONS+=(u '-LND Auto-Unlock' ${autoUnlock})
OPTIONS+=(x '-LND StaticChannelBackup on Nextcloud' ${NextcloudBackup})
OPTIONS+=(d '-LND StaticChannelBackup DropBox' ${DropboxBackup})
OPTIONS+=(e '-LND StaticChannelBackup USB Drive' ${LocalBackup})
OPTIONS+=(l '-LND UPnP (AutoNAT)' ${autoNatDiscovery})
@ -306,6 +311,22 @@ else
echo "Dropbox backup setting unchanged."
fi
# Nextcloud process choice
choice="off"; check=$(echo "${CHOICES}" | grep -c "x")
if [ ${check} -eq 1 ]; then choice="on"; fi
if [ "${NextcloudBackup}" != "${choice}" ]; then
echo "Nextcloud Setting changed .."
anychange=1
sudo -u admin /home/admin/config.scripts/nextcloud.upload.sh ${choice}
if [ "${choice}" = "on" ]; then
# doing initial upload so that user can see result
source /mnt/hdd/raspiblitz.conf
sudo /home/admin/config.scripts/nextcloud.upload.sh upload /mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup
fi
else
echo "Nextcloud backup setting unchanged."
fi
# LocalBackup process choice
choice="off"; check=$(echo "${CHOICES}" | grep -c "e")
if [ ${check} -eq 1 ]; then choice="on"; fi

View file

@ -368,6 +368,18 @@ do
fi
fi
# check if Nextcloud backups are enabled
if [ $nextcloudBackupServer ] && [ $nextcloudBackupUser ] && [ $nextcloudBackupPassword ]; then
echo "--> Offsite-Backup Nextcloud"
source <(sudo /home/admin/config.scripts/nextcloud.upload.sh upload ${localBackupPath})
source <(sudo /home/admin/config.scripts/nextcloud.upload.sh upload ${localTimestampedPath})
if [ ${#err} -gt 0 ]; then
echo "FAIL - ${err}"
else
echo "OK - ${upload}"
fi
fi
#else
# echo "Channel Backup File not changed."
fi

View file

@ -0,0 +1,109 @@
#!/bin/bash
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# script to upload a file to Nextcloud"
echo "# nextcloud.upload.sh on [server] [user] [password]"
echo "# nextcloud.upload.sh off"
echo "# nextcloud.upload.sh upload [filepath]"
echo "err='just informational output'"
exit 1
fi
source /mnt/hdd/raspiblitz.conf
on() {
local server="${1}"
local user="${2}"
local password="${3}"
sudo touch /home/admin/.tmp
sudo chmod 777 /home/admin/.tmp
if [ -z "${server}" ]; then
whiptail --title "Static Channel Backup on Nextcloud" --inputbox "Enter your Nextcloud server URL\nExample: https://cloud.johnsmith.com" 11 70 2>/home/admin/.tmp
server=$(cat /home/admin/.tmp)
fi
if [ -z "${user}" ]; then
whiptail --title "Static Channel Backup on Nextcloud" --inputbox "Enter your Nextcloud username" 11 70 2>/home/admin/.tmp
user=$(cat /home/admin/.tmp)
fi
if [ -z "${password}" ]; then
whiptail --title "Static Channel Backup on Nextcloud" --inputbox "Enter your Nextcloud password" 11 70 2>/home/admin/.tmp
password=$(cat /home/admin/.tmp)
fi
shred -u /home/admin/.tmp
if [ "${server}" ] && [ "${user}" ] && [ "${password}" ]; then
sudo sed -i '/nextcloudBackupServer=.*/d' /mnt/hdd/raspiblitz.conf
echo "nextcloudBackupServer=${server}" >> /mnt/hdd/raspiblitz.conf
sudo sed -i '/nextcloudBackupUser=.*/d' /mnt/hdd/raspiblitz.conf
echo "nextcloudBackupUser=${user}" >> /mnt/hdd/raspiblitz.conf
sudo sed -i '/nextcloudBackupPassword=.*/d' /mnt/hdd/raspiblitz.conf
echo "nextcloudBackupPassword=${password}" >> /mnt/hdd/raspiblitz.conf
else
echo "Please provide nextcloud server, username and password"
exit 1
fi
}
off() {
sudo sed -i '/nextcloudBackupServer=.*/d' /mnt/hdd/raspiblitz.conf
sudo sed -i '/nextcloudBackupUser=.*/d' /mnt/hdd/raspiblitz.conf
sudo sed -i '/nextcloudBackupPassword=.*/d' /mnt/hdd/raspiblitz.conf
}
upload() {
local filepath="${1}"
if [ -z "${filepath}" ]; then
echo "err='Missing argument: filepath'"
exit 1
fi
if [ -z "${nextcloudBackupServer}" ] || [ -z "${nextcloudBackupUser}" ] || [ -z "${nextcloudBackupPassword}" ]; then
echo "err='Nextcloud credentials are missing'"
exit 1
fi
local remoteDirUrl="$nextcloudBackupServer/remote.php/dav/files/$nextcloudBackupUser/raspiblitz/"
# checking if remote directory exists
local response
response=$(curl "${remoteDirUrl}" \
--user "${nextcloudBackupUser}:${nextcloudBackupPassword}" \
--request PROPFIND \
--silent)
# if remote directory doesn't exist, we need to create it
if [[ "${response}" = *DAV\\Exception\\NotFound* ]]; then
curl "${remoteDirUrl}" \
--user "${nextcloudBackupUser}:${nextcloudBackupPassword}" \
--request MKCOL \
--silent
fi
if curl "${remoteDirUrl}" \
--user "${nextcloudBackupUser}:${nextcloudBackupPassword}" \
--upload-file "${filepath}" \
--silent;
then
echo "File ${filepath} has been uploaded"
echo "upload=1"
else
echo "err='File upload failed'"
echo "upload=0"
exit 1
fi
}
case "${1}" in
on) on "${2}" "${3}" "${4}" ;;
off) off ;;
upload) upload "${2}" ;;
*) echo "err=Unknown action: ${1}" ; exit 1 ;;
esac