feat(portal): configurable portal subdomain with real ACME cert, strictly internal (sub-project C) - #180
Merged
Conversation
…te caddy email to portal_settings_host
…ted dropdown/confirm/toast)
…ains hint i18n key - Portal host error element had inline style="display:none" that was never toggled by classList changes; now directly manage style.display in the Apply handler (clear with 'none', show with '') - Fix 3 i18n key references from non-existent settings.general.title to settings.tab_general in aurora/default/pro settings templates - Remove unused app variable declaration in portal_host_ui.test.js (both declare and assign were dead code)
…omain # Conflicts: # src/i18n/de.json # src/i18n/en.json
…QL url-substring false positive)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Portal-Subdomain (Teilprojekt C der Domain-Initiative A→C→B)
Macht den Host des VPN-Landing-Portals konfigurierbar: Der Admin wählt eine verifizierte Basis-Domain aus der Domains-Registry (Teilprojekt A) + ein freies Subdomain-Präfix; das Portal wird unter z. B.
home.domaincaster.commit einem echten Let's-Encrypt-Zertifikat ausgeliefert (keine Browser-Warnung), bleibt aber strikt intern erreichbar (nur VPN). Ohne Konfiguration verhält es sich exakt wie bisher (home.<GC_DNS_DOMAIN>, interner Issuer) — voll rückwärtskompatibel.Architektur
effectivePortalHost()(Request-Zeit, nur Settings, kein Cache) — die drei bisher hartkodiertenhome.<dns.domain>-Stellen (caddyConfig, dns.js, portalIdentity) lesen ihn.validatePortalHost():domains.isVerified+ Kollisionsprüfung gegen Management-Host, Route-Domain und Peer-FQDN.forceInternalDomains); interner Default → interner Issuer./.well-known/acme-challenge/*→ (1)remote_ip-Gate (echte TCP-Quelle) → Portal → (2) nicht-intern & nicht-ACME → 404. Die 404-Route nimmt den ACME-Pfad pernot-Matcher aus → Cert-Ausstellung bleibt möglich, externe Quellen sehen nie Portal-Inhalt.Sicherheit
Das
remote_ip-Gate (echte TCP-Quelle) ist die einzige Intern-only-Kontrolle; Header-Strip/Set + portalIdentity-Dreifachprüfung (Loopback + Header +hostname === effektiver Host) bleiben unverändert. Trade-off (dokumentiert): öffentlicher Host + Cert erscheinen in Certificate-Transparency-Logs — bewusste Admin-Entscheidung.Tests
portal_*-Testdateien (TDD) + angepassteportal_dns_caddy-Struktur-Asserts: 43/43 grün lokal.Offline-Blindfleck + Post-Deploy-Pflicht
ACME-Ausstellung, echtes
remote_ip-Gating und dnsmasq-Reload sind offline nicht verifizierbar; kein lokalescaddy-Binary fürcaddy validate. Die Post-Deploy-Pflichtcheckliste (intern→Portal+Cert, extern→404, ACME-Pfad→nicht-404, Recovery) steht im Doku-Batch unterDokumentation/gatecontrol/portal-subdomain/.Baut auf A (PR #177, gemergt v1.95.0) auf. B (Routen nutzen Registry) folgt als eigene Spec/Plan-Runde.
🤖 Generated with Claude Code