librelad 875a60f90f LibrePortal v0.1.0 — initial release
A free, open, self-hosted app platform (GNU AGPLv3): one-click app deploys,
Traefik reverse proxy with automatic SSL, rootless Docker support, gluetun
VPN routing, and a web dashboard to manage it all.

Free & open forever to self-host; optional paid hosted services fund it.
See PROMISE.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-21 20:37:54 +01:00

80 lines
2.3 KiB
Bash

#!/bin/bash
# Borg adapter — repository URI builder + env exporter. Borg uses BORG_REPO,
# BORG_PASSPHRASE, and BORG_RSH (for SFTP). Password comes straight from
# CFG_BACKUP_LOC_<idx>_PASSWORD via resticLocationPassword.
borgLocationUri()
{
local idx="$1"
local override
override=$(resticLocationField "$idx" URI)
if [[ -n "$override" ]]; then
echo "$override"
return
fi
local t
t=$(resticLocationType "$idx")
case "$t" in
local)
backupLocationResolvedPath "$idx"
;;
sftp)
local user host port path
user=$(resticLocationField "$idx" SSH_USER)
host=$(resticLocationField "$idx" SSH_HOST)
port=$(resticLocationField "$idx" SSH_PORT)
[[ -z "$port" ]] && port=22
path=$(resticLocationField "$idx" SSH_PATH)
echo "ssh://${user}@${host}:${port}/${path#/}"
;;
*)
# Borg doesn't natively support S3/B2/etc. — recommend rclone-mount.
isNotice "Borg supports local + sftp natively. For $t, mount the bucket via rclone and use type=local."
return 1
;;
esac
}
borgEnvExport()
{
local idx="$1"
local uri
uri=$(borgLocationUri "$idx") || return 1
local pass
pass=$(resticLocationPassword "$idx")
if [[ -z "$pass" || "$pass" == RANDOMIZEDPASSWORD* ]]; then
isError "Location $idx has no password set (CFG_BACKUP_LOC_${idx}_PASSWORD). Run the install/scan password pass first."
return 1
fi
export BORG_REPO="$uri"
export BORG_PASSPHRASE="$pass"
if [[ "$(resticLocationType "$idx")" == "sftp" ]]; then
local port ssh_cmd
port=$(resticLocationField "$idx" SSH_PORT)
[[ -z "$port" ]] && port=22
ssh_cmd=$(backupSshCommand "$idx" "$port" "raw") || return 1
export BORG_RSH="$ssh_cmd"
fi
}
borgEnvUnset()
{
unset BORG_REPO BORG_PASSPHRASE BORG_RSH SSHPASS
}
# Borg archive name template — encodes the metadata we'd otherwise put in
# restic tags. Filter on it with `borg list --glob-archives '<app>-<host>-*'`.
borgArchiveName()
{
local app="$1"
local host="${2:-$CFG_INSTALL_NAME}"
local timestamp
timestamp=$(date -u +%Y-%m-%dT%H:%M:%S)
echo "${app}-${host}-${timestamp}"
}