#!/bin/bash -e
#
# DO NOT EDIT.
#
# Maintained (will be replaced) by Ansible.
#
# sudo backup [-n]

if [ `id -u` != "0" ]
then
    echo "This script must be run as root."
    exit 1
fi

if [ "$1" = "-n" ]
then
    presync=yes
    shift
fi

if [ "$#" != "0" ]
then
    echo "usage: $0 [-n]"
    exit 2
fi

function cleanup () {
    sleep 2
    finish
}

trap cleanup SIGHUP SIGINT SIGQUIT SIGPIPE SIGTERM

function start () {

    if ! mountpoint -q /backup/
    then
	echo "Mounting /backup/."
	cryptsetup luksOpen /dev/disk/by-partlabel/Backup backup
	mount /dev/mapper/backup /backup
    else
	echo "Found /backup/ already mounted."
    fi

    if [ ! -d /backup/home ]
    then
	echo "The backup device should be mounted at /backup/"
	echo "yet there is no /backup/home/ directory."
	exit 2
    fi

    if [ ! $presync ]
    then
	echo "Putting Nextcloud into maintenance mode."
	( cd /Nextcloud/nextcloud/
	  sudo -u www-data php occ maintenance:mode --on &>/dev/null )

	echo "Dumping Nextcloud database."
	( cd /Nextcloud/
	  umask 07
	  BAK=`date +"%Y%m%d%H%M"`-dbbackup.bak.gz
	  CNF=/Nextcloud/dbbackup.cnf
	  mysqldump --defaults-file=$CNF nextcloud | gzip > $BAK
	  chmod 440 $BAK
	  ls -t1 *-dbbackup.bak.gz | tail -n +4 \
	  | while read; do rm "$REPLY"; done
	)
    fi

}

function finish () {

    if [ ! $presync ]
    then
	echo "Putting Nextcloud back into service."
	( cd /Nextcloud/nextcloud/
	  sudo -u www-data php occ maintenance:mode --off &>/dev/null )
    fi

    if mountpoint -q /backup/
    then
	echo "Unmounting /backup/."
	umount /backup
	cryptsetup luksClose backup
	echo "Done."
	echo "The backup device can be safely disconnected."
    fi
}

start

for D in /home /[A-Z]*; do
    echo "Updating /backup$D/."
    ionice --class Idle --ignore \
	rsync -av --delete --exclude=.NoBackups $D/ /backup$D/
done

finish
