BastionGuard/data/scripts/bank-helper
specialworld83 f0f913a209 Release 2.0
2026-07-15 10:52:22 +02:00

79 lines
3.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# bank-helper — BastionGuard™
# Copia banks.json nella directory di sistema e aggiorna version.txt.
#
# Può essere invocato in due modi:
# 1. Direttamente da utente: bank-helper <sorgente> <url>
# → si auto-rilancia con sudo se non è già root
# 2. Tramite sudo (da BankPage): sudo bank-helper <sorgente> <url>
# → esegue direttamente senza dialog
#
# Argomenti:
# $1 percorso assoluto del file banks.json sorgente (utente)
# $2 URL da cui è stata scaricata la lista (scritto in version.txt)
set -euo pipefail
readonly DEST_DIR="/usr/share/BastionGuard/data/bank"
readonly DEST_FILE="${DEST_DIR}/banks.json"
readonly VERSION_FILE="${DEST_DIR}/version.txt"
# ── Auto-elevazione ──────────────────────────────────────────────────────────
# Se non siamo root, ci rilanciamo con sudo (che grazie al sudoers non
# chiederà password). Questo permette di invocare bank-helper direttamente
# dal terminale senza dover premettere "sudo".
if [[ $EUID -ne 0 ]]; then
exec sudo /usr/bin/bank-helper "$@"
fi
# ── Validazione argomenti ────────────────────────────────────────────────────
if [[ $# -ne 2 ]]; then
echo "Utilizzo: bank-helper <percorso_banks_json> <url_sorgente>" >&2
exit 1
fi
SOURCE_FILE="$1"
SOURCE_URL="$2"
# ── Controlli di sicurezza ───────────────────────────────────────────────────
# 1. Il file sorgente deve esistere ed essere un file regolare.
if [[ ! -f "${SOURCE_FILE}" ]]; then
echo "bank-helper: file sorgente non trovato: ${SOURCE_FILE}" >&2
exit 2
fi
# 2. Il percorso sorgente deve stare dentro la home dell'utente reale.
# SUDO_USER è impostato da sudo; se siamo root diretto usiamo LOGNAME/USER.
REAL_USER="${SUDO_USER:-${LOGNAME:-${USER:-}}}"
if [[ -z "${REAL_USER}" ]] || [[ "${REAL_USER}" == "root" ]]; then
# Fallback: accettiamo qualsiasi percorso se lanciato come root diretto
# (caso d'uso: script di packaging/CI).
true
else
REAL_HOME=$(getent passwd "${REAL_USER}" | cut -d: -f6)
RESOLVED_SOURCE=$(realpath -e "${SOURCE_FILE}" 2>/dev/null || true)
if [[ -z "${RESOLVED_SOURCE}" ]] || \
[[ "${RESOLVED_SOURCE}" != "${REAL_HOME}/"* ]]; then
echo "bank-helper: percorso sorgente non autorizzato: ${SOURCE_FILE}" >&2
exit 4
fi
fi
# 3. Il file deve sembrare JSON (primo byte '{').
FIRST_CHAR=$(head -c 1 "${SOURCE_FILE}")
if [[ "${FIRST_CHAR}" != "{" ]]; then
echo "bank-helper: il file sorgente non sembra JSON valido." >&2
exit 5
fi
# ── Copia ────────────────────────────────────────────────────────────────────
install -d -m 755 "${DEST_DIR}"
install -m 644 "${SOURCE_FILE}" "${DEST_FILE}"
# ── version.txt ──────────────────────────────────────────────────────────────
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
printf "URL: %s\nAggiornato il: %s\n" "${SOURCE_URL}" "${TIMESTAMP}" \
> "${VERSION_FILE}"
exit 0