#!/bin/bash
# h42 – Docker-Dienste auf hov4 veröffentlichen: DNS-Eintrag, Let's-Encrypt-Zertifikat, nginx-Reverse-Proxy.
#   sudo h42 new    <name|fqdn> <port> [zugriff] [optionen]      alles in einem Rutsch
#   sudo h42 del    <name|fqdn> [optionen]                       zurückbauen (Gegenstück zu new)
#   sudo h42 dns    add|del|exists|show|wait|txt-add|txt-del …   DNS auf ns1 (nsupdate/TSIG)
#        h42 pihole add|del|exists|list …                        lokaler DNS-Eintrag im Pi-hole (LAN)
#   sudo h42 cert   add|del|exists|list …                        Zertifikat über dehydrated (HTTP-01 oder DNS-01)
#   sudo h42 vhost  add|del|exists|passwd|check …                nginx-Reverse-Proxy auf 127.0.0.1:<port> oder statisch
#   sudo h42 apt    init|add|list|remove …                       eigenes apt-Repo (Paket h42-pkg)
#   sudo h42 fdroid init|add|list|remove|info …                  eigenes F-Droid-Repo (Paket h42-pkg)
#        h42 help <modus>                                        Hilfe zu einem Modus
# Einstellungen: /etc/h42/h42.conf
set -euo pipefail
export H42_LIB=${H42_LIB:-/usr/lib/h42}

usage() { awk 'NR==1{next} /^#/{sub(/^# ?/,""); print; next} {exit}' "$0"; exit "${1:-1}"; }
modes() { for f in "$H42_LIB"/*; do [[ -f $f && -x $f ]] && basename "$f"; done | xargs; }

mode=${1:-}
case $mode in
  "") usage ;;
  -h|--help) usage 0 ;;
  help) [ -n "${2:-}" ] || usage 0; set -- "$2" --help; mode=$1 ;;
esac
if [[ ! $mode =~ ^[a-z]+$ || ! -f $H42_LIB/$mode || ! -x $H42_LIB/$mode ]]; then
  echo "h42: unbekannter Modus: $mode (installiert: $(modes))" >&2
  case $mode in apt|fdroid) echo "h42 $mode kommt aus dem Paket h42-pkg" >&2 ;; esac
  exit 1
fi
shift
exec "$H42_LIB/$mode" "$@"
