BackupSystemWww: nc-secrets-sheet.sh

File nc-secrets-sheet.sh, 3.1 KB (added by Johannes Lode, 12 days ago)
Line 
1#!/bin/bash
2#
3# nc-secrets-sheet.sh -- erzeugt eine Safe-Kopie der unersetzlichen
4# Nextcloud-Schlüssel (instanceid, passwordsalt, secret) als RST-Blatt
5# mit eingebettetem QR-Code, auf Wunsch gleich als druckfertiges PDF.
6#
7# Aufruf:  nc-secrets-sheet.sh <pfad/zu/config.php> [Instanz-Label]
8# Ausgabe: $OUTDIR (Default: aktuelles Verzeichnis)
9#            nc-secrets-<datum>.png   QR-Code
10#            nc-secrets-<datum>.rst   Blatt, zugleich Klarkopie
11#            nc-secrets-<datum>.pdf   nur wenn rst2pdf vorhanden
12#
13# Umgebung: OUTDIR   Zielverzeichnis
14#           NOPDF=1  PDF-Erzeugung ueberspringen
15#
16set -euo pipefail
17umask 077
18
19CONFIG=${1:?Aufruf: $0 <pfad/zu/config.php> [Instanz-Label]}
20LABEL=${2:-$(hostname -f 2>/dev/null || hostname)}
21OUTDIR=${OUTDIR:-.}
22STAMP=$(date +%Y-%m-%d)
23BASE="$OUTDIR/nc-secrets-$STAMP"
24PNG="nc-secrets-$STAMP.png"     # im RST relativ referenziert
25
26[ -r "$CONFIG" ] || { echo "config.php nicht lesbar: $CONFIG" >&2; exit 1; }
27[ -d "$OUTDIR" ] || { echo "Zielverzeichnis fehlt: $OUTDIR" >&2; exit 1; }
28command -v qrencode >/dev/null || { echo "qrencode nicht gefunden" >&2; exit 1; }
29
30# Wert eines config.php-Eintrags holen; vertraegt ' und " sowie fehlendes Komma.
31value_of() {
32        sed -n "s/^[[:space:]]*['\"]$1['\"][[:space:]]*=>[[:space:]]*['\"]\(.*\)['\"][[:space:]]*,\{0,1\}[[:space:]]*$/\1/p" "$CONFIG" | head -n1
33}
34
35PAYLOAD=""
36for key in instanceid passwordsalt secret; do
37        val=$(value_of "$key")
38        [ -n "$val" ] || { echo "Eintrag nicht gefunden: $key" >&2; exit 1; }
39        PAYLOAD+="$key=$val"$'\n'
40done
41
42printf '%s' "$PAYLOAD" | qrencode -l H -s 10 -m 4 -o "$BASE.png"
43
44# --- Grid-Tabelle mit berechneten Spaltenbreiten ------------------------------
45W1=7    # "Instanz", "Quelle", "Stand"
46W2=0
47for v in "$LABEL" "$CONFIG" "$STAMP"; do
48        [ ${#v} -gt $W2 ] && W2=${#v}
49done
50
51rule() { printf '+%*s+%*s+\n' $((W1 + 2)) '' $((W2 + 2)) '' | tr ' ' '-'; }
52row() { printf '| %-*s | %-*s |\n' "$W1" "$1" "$W2" "$2"; }
53
54{
55        echo "======================================"
56        echo "Nextcloud -- unersetzliche Schlüssel"
57        echo "======================================"
58        echo
59        rule; row Instanz "$LABEL"; rule; row Quelle "$CONFIG"; rule; row Stand "$STAMP"; rule
60        echo
61        echo "Schlüssel"
62        echo "=========="
63        echo
64        echo "::"
65        echo
66        printf '%s' "$PAYLOAD" | sed 's/^/    /'
67        echo
68        echo "QR-Code"
69        echo "======="
70        echo
71        echo "Inhalt identisch mit dem Abschnitt oben, Fehlerkorrektur Stufe H."
72        echo
73        echo ".. image:: $PNG"
74        echo "   :width: 7cm"
75        echo "   :align: center"
76        echo
77        echo ".. warning::"
78        echo
79        echo "   Ohne diese Werte sind Passman-Daten und App-Passwoerter auch aus"
80        echo "   einem vollstaendigen Datenbank-Backup nicht wiederherstellbar."
81        echo "   Dieses Blatt gehoert in den Safe -- nicht in das Passman-Vault,"
82        echo "   im Wiki und im Dirvish-Baum hilft sie ggf. auch nicht."
83} > "$BASE.rst"
84
85echo "geschrieben: $BASE.png"
86echo "geschrieben: $BASE.rst"
87
88if [ -z "${NOPDF:-}" ] && command -v rst2pdf >/dev/null; then
89        ( cd "$OUTDIR" && rst2pdf "nc-secrets-$STAMP.rst" -o "nc-secrets-$STAMP.pdf" )
90        echo "geschrieben: $BASE.pdf"
91else
92        echo "PDF uebersprungen -- von Hand: cd $OUTDIR && rst2pdf nc-secrets-$STAMP.rst"
93fi