#!/bin/bash
# Prueft einen frisch aufgesetzten Fremd-Knoten von aussen und -- per SSH des Betreibers -- von innen.
#   bash check.sh <ip> [mix|da] [ssh-user] [ssh-key]     (oder SSH_OPTS="-i pfad" in der Umgebung)
# Von aussen: Ports (22 offen fuer den Betreiber; Mix: 1789 offen; DA: 1789 zu; 7443 immer zu).
# Von innen (alles unter /var/lib/hokono ist 0700 hokono -> sudo): Hash des laufenden/installierten Binaries gegen das Registry-Manifest, journald 0 B,
#            offene Ports, und NUR das oeffentliche Schluesselmaterial.
# Laeuft auf macOS und Linux (Port-Probe per python3, kein nc-Dialekt).
set -euo pipefail
IP="${1:?ip}"; ROLE="${2:-mix}"; U="${3:-hokono-admin}"; KEY="${4:-}"
SSH="ssh -o BatchMode=yes ${SSH_OPTS:-} ${KEY:+-i $KEY}"
port(){ python3 - "$IP" "$1" <<'PY'
import socket, sys
s = socket.socket(); s.settimeout(3)
try:
    s.connect((sys.argv[1], int(sys.argv[2]))); print("offen")
except Exception:
    print("zu")
PY
}
p22=$(port 22); p1789=$(port 1789); p7443=$(port 7443)
printf "%-6s %s\n" 22 "$p22"
if [ "$ROLE" = "mix" ]; then
  printf "%-6s %s (muss offen sein)\n" 1789 "$p1789"
else
  printf "%-6s %s (DA: muss zu sein)\n" 1789 "$p1789"
fi
printf "%-6s %s (muss zu sein: kein Gateway)\n" 7443 "$p7443"
ok=1
[ "$p22" = offen ] || ok=0
[ "$p7443" = zu ] || ok=0
if [ "$ROLE" = "mix" ]; then [ "$p1789" = offen ] || ok=0; else [ "$p1789" = zu ] || ok=0; fi
[ $ok = 1 ] && echo "PORTS OK" || echo "PORTS WEICHEN AB"

if [ "$ROLE" = "mix" ]; then
$SSH "$U@$IP" 'set -e
  pid=$(pidof hokono-mixnode); run=$(sudo sha256sum /proc/$pid/exe | cut -d" " -f1)
  disk=$(sha256sum /usr/local/bin/hokono-mixnode | cut -d" " -f1)
  man=$(sudo grep " mixnode$" /var/lib/hokono/SHA256SUMS.registry | cut -d" " -f1)
  echo "laufend  $run"; echo "platte   $disk"; echo "manifest $man"
  [ "$run" = "$disk" ] && [ "$disk" = "$man" ] && echo "HASH OK" || echo "HASH WEICHT AB"
  echo "journald: $(sudo journalctl --disk-usage 2>/dev/null | grep -o "[0-9.]*[KMG]\?B" | head -1)"
  sudo ss -tlnp | awk "NR>1{print \$4}" | grep -E "^0\.0\.0\.0:(1789|22)$" | sort -u
  echo "--- pubkeys.txt (oeffentlich, Datei ist 0600 hokono -> sudo):"; sudo cat /var/lib/hokono/pubkeys.txt'
else
$SSH "$U@$IP" 'set -e
  disk=$(sha256sum /usr/local/bin/hokono-dirauth | cut -d" " -f1)
  man=$(sudo grep " dirauth$" /var/lib/hokono/SHA256SUMS.registry | cut -d" " -f1)
  echo "platte   $disk"; echo "manifest $man"
  [ "$disk" = "$man" ] && echo "HASH OK" || echo "HASH WEICHT AB"
  echo "journald: $(sudo journalctl --disk-usage 2>/dev/null | grep -o "[0-9.]*[KMG]\?B" | head -1)"
  sudo ss -tlnp | awk "NR>1{print \$4}" | grep -E "^0\.0\.0\.0:" | sort -u
  echo "da.env: $(sudo stat -c "%a %U" /var/lib/hokono/da.env 2>/dev/null || echo fehlt)  (erwartet: 600 hokono)"
  echo "--- oeffentliche DA-Schluessel:"; sudo grep -E "^(ED_PUB|MLDSA_PUB)=" /var/lib/hokono/da.env'
fi
