#!/bin/sh
# Nightly backup of what lives on the APP SERVER: uploaded files and
# deploy/.env (its JWT_SECRET and WORKSPACE_ENCRYPTION_KEY are needed to use
# a restored database at all). Run as root:
#
#   echo '30 2 * * * root sh /opt/flowfabric/deploy/scripts/backup-files.sh' | sudo tee /etc/cron.d/flowfabric-backup-files
#
# Keeps KEEP_DAYS days. Copy BACKUP_DIR off this server too.
#
# Restore:  sudo tar -xzf uploads-<stamp>.tar.gz -C <UPLOADS_DIR's parent>
#           && sudo chown -R 10001:10001 <UPLOADS_DIR>
set -eu

APP_DIR=${APP_DIR:-/opt/flowfabric}
BACKUP_DIR=${BACKUP_DIR:-/var/backups/flowfabric/files}
KEEP_DAYS=${KEEP_DAYS:-14}
STAMP=$(date +%Y-%m-%d_%H%M)

UPLOADS_DIR=$(sed -n 's/^UPLOADS_DIR=//p' "$APP_DIR/deploy/.env" | tail -n 1)
UPLOADS_DIR=${UPLOADS_DIR:-/srv/flowfabric/uploads}

umask 077
mkdir -p "$BACKUP_DIR"

tar -czf "$BACKUP_DIR/uploads-$STAMP.tar.gz" -C "$(dirname "$UPLOADS_DIR")" "$(basename "$UPLOADS_DIR")"
cp "$APP_DIR/deploy/.env" "$BACKUP_DIR/env-$STAMP"

find "$BACKUP_DIR" -maxdepth 1 -type f -mtime +"$KEEP_DAYS" -delete
echo "FlowFabric files backup written to $BACKUP_DIR (uploads-$STAMP.tar.gz, env-$STAMP)"
