# Reverse Proxy für den Betrieb im Firmennetz.
#
# Der Name ist öffentlich (hr.elycon.solutions), die Adresse dahinter privat
# (10.x). Das ist erlaubt und der übliche Weg: der DNS-Eintrag ist von aussen
# auflösbar, der Server nicht erreichbar.
#
# Warum das der Aufwand wert ist: Entra ID akzeptiert `http` nur für
# localhost. Ohne HTTPS gibt es keine Anmeldung — und ein selbst signiertes
# Zertifikat müsste auf jedem Arbeitsplatz als vertrauenswürdig hinterlegt
# werden. Mit der DNS-Challenge kommt ein regulär vertrauenswürdiges
# Zertifikat zustande, ohne dass der Server je aus dem Internet erreichbar
# sein muss.
#
# Voraussetzung: ein Caddy-Build mit dem DNS-Modul des eigenen Anbieters,
# etwa
#   xcaddy build --with github.com/caddy-dns/cloudflare
# Andere Anbieter siehe https://github.com/caddy-dns
#
# Der API-Schlüssel gehört in eine Umgebungsvariable des Dienstes, nicht in
# diese Datei.

hr.elycon.solutions {
	tls {
		dns cloudflare {env.CLOUDFLARE_API_TOKEN}
	}

	# Die Anwendung lauscht nur auf der Loopback-Adresse (siehe
	# docker-compose.yml), erreichbar ist sie also ausschliesslich über
	# diesen Proxy.
	reverse_proxy 127.0.0.1:3000

	# Ohne diese Weitergabe baut Auth.js seine Rückruf-Adresse aus dem
	# Container-Hostnamen statt aus dem echten Namen — die Anmeldung landet
	# dann auf einer Adresse, die niemand kennt. `trustHost` in
	# lib/auth/config.ts wertet genau diese Header aus.
	header_up X-Forwarded-Proto {scheme}
	header_up X-Forwarded-Host {host}

	encode gzip zstd

	log {
		output file /var/log/caddy/hr.log
		format json
	}
}
