#!/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 # → si auto-rilancia con sudo se non è già root # 2. Tramite sudo (da BankPage): sudo bank-helper # → 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 " >&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