#!/bin/bash
#
# nc-secrets-sheet.sh -- erzeugt eine Safe-Kopie der unersetzlichen
# Nextcloud-Schlüssel (instanceid, passwordsalt, secret) als RST-Blatt
# mit eingebettetem QR-Code, auf Wunsch gleich als druckfertiges PDF.
#
# Aufruf:  nc-secrets-sheet.sh <pfad/zu/config.php> [Instanz-Label]
# Ausgabe: $OUTDIR (Default: aktuelles Verzeichnis)
#            nc-secrets-<datum>.png   QR-Code
#            nc-secrets-<datum>.rst   Blatt, zugleich Klarkopie
#            nc-secrets-<datum>.pdf   nur wenn rst2pdf vorhanden
#
# Umgebung: OUTDIR   Zielverzeichnis
#           NOPDF=1  PDF-Erzeugung ueberspringen
#
set -euo pipefail
umask 077

CONFIG=${1:?Aufruf: $0 <pfad/zu/config.php> [Instanz-Label]}
LABEL=${2:-$(hostname -f 2>/dev/null || hostname)}
OUTDIR=${OUTDIR:-.}
STAMP=$(date +%Y-%m-%d)
BASE="$OUTDIR/nc-secrets-$STAMP"
PNG="nc-secrets-$STAMP.png"	# im RST relativ referenziert

[ -r "$CONFIG" ] || { echo "config.php nicht lesbar: $CONFIG" >&2; exit 1; }
[ -d "$OUTDIR" ] || { echo "Zielverzeichnis fehlt: $OUTDIR" >&2; exit 1; }
command -v qrencode >/dev/null || { echo "qrencode nicht gefunden" >&2; exit 1; }

# Wert eines config.php-Eintrags holen; vertraegt ' und " sowie fehlendes Komma.
value_of() {
	sed -n "s/^[[:space:]]*['\"]$1['\"][[:space:]]*=>[[:space:]]*['\"]\(.*\)['\"][[:space:]]*,\{0,1\}[[:space:]]*$/\1/p" "$CONFIG" | head -n1
}

PAYLOAD=""
for key in instanceid passwordsalt secret; do
	val=$(value_of "$key")
	[ -n "$val" ] || { echo "Eintrag nicht gefunden: $key" >&2; exit 1; }
	PAYLOAD+="$key=$val"$'\n'
done

printf '%s' "$PAYLOAD" | qrencode -l H -s 10 -m 4 -o "$BASE.png"

# --- Grid-Tabelle mit berechneten Spaltenbreiten ------------------------------
W1=7	# "Instanz", "Quelle", "Stand"
W2=0
for v in "$LABEL" "$CONFIG" "$STAMP"; do
	[ ${#v} -gt $W2 ] && W2=${#v}
done

rule() { printf '+%*s+%*s+\n' $((W1 + 2)) '' $((W2 + 2)) '' | tr ' ' '-'; }
row() { printf '| %-*s | %-*s |\n' "$W1" "$1" "$W2" "$2"; }

{
	echo "======================================"
	echo "Nextcloud -- unersetzliche Schlüssel"
	echo "======================================"
	echo
	rule; row Instanz "$LABEL"; rule; row Quelle "$CONFIG"; rule; row Stand "$STAMP"; rule
	echo
	echo "Schlüssel"
	echo "=========="
	echo
	echo "::"
	echo
	printf '%s' "$PAYLOAD" | sed 's/^/    /'
	echo
	echo "QR-Code"
	echo "======="
	echo
	echo "Inhalt identisch mit dem Abschnitt oben, Fehlerkorrektur Stufe H."
	echo
	echo ".. image:: $PNG"
	echo "   :width: 7cm"
	echo "   :align: center"
	echo
	echo ".. warning::"
	echo
	echo "   Ohne diese Werte sind Passman-Daten und App-Passwoerter auch aus"
	echo "   einem vollstaendigen Datenbank-Backup nicht wiederherstellbar."
	echo "   Dieses Blatt gehoert in den Safe -- nicht in das Passman-Vault,"
	echo "   im Wiki und im Dirvish-Baum hilft sie ggf. auch nicht."
} > "$BASE.rst"

echo "geschrieben: $BASE.png"
echo "geschrieben: $BASE.rst"

if [ -z "${NOPDF:-}" ] && command -v rst2pdf >/dev/null; then
	( cd "$OUTDIR" && rst2pdf "nc-secrets-$STAMP.rst" -o "nc-secrets-$STAMP.pdf" )
	echo "geschrieben: $BASE.pdf"
else
	echo "PDF uebersprungen -- von Hand: cd $OUTDIR && rst2pdf nc-secrets-$STAMP.rst"
fi
