feat(domains): zentrale verifizierte Domain-Registry (Teilprojekt A) - #177
Merged
Merged
Conversation
This was referenced Jun 25, 2026
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.
Zentrale, verifizierte Domain-Registry (Teilprojekt A)
Führt eine zentrale Registry der Hauptdomains einer Instanz unter Einstellungen → Allgemein ein. Jede Domain wird verifiziert (öffentliches DNS A/AAAA zeigt auf die Server-IP), bevor sie als nutzbar markiert wird. Stellt einen sauberen Service bereit, den spätere Features (Portal-Subdomain = C, Routen-Umbau = B) konsumieren — ohne hier bereits einen Consumer zu verdrahten.
Was enthalten ist
domains-Tabelle (id, domain UNIQUE, status, resolved_ip, last_error, verified_at, last_checked_at, created_at).domains-Service — Server-IP-Ableitung (Override →GC_WG_HOST→GC_BASE_URL-Host, kein Phone-home), DNS-Match-Verifizierung über einen expliziten öffentlichen Resolver (1.1.1.1/9.9.9.9/8.8.8.8, konfigurierbar; nie der System-/dnsmasq-Resolver), 5-s-Timeouts, CRUD. ExponiertlistVerified()/baseDomains()/isVerified()für spätere Specs.pending, niefailedbeim Boot; ≥2-all-mismatch-Guard setzt eine „Server-IP prüfen"-Warnung)./api/v1/settings/domains— Session-Auth wie die anderen Settings-Cluster;/^\/domains(\/|$)/inTOKEN_FORBIDDEN(kein API-Token darf Domains verwalten);net.isIP-Validierung des Overrides; nur parametrisiertes SQL.settings.js-Verdrahtung (DOM-sicheres Rendering, keine hardcodierten Strings).Semantik (ehrlich)
verifiedbedeutet „öffentliches DNS zeigt auf diese Server-IP" — nicht „wird bedient/Cert kommt". Transiente Zustände (Resolver unerreichbar, Server-IP unbekannt, Timeout) →pending, niefailed. Per-Domainfailednur bei known-good Server-IP und Domain löst woanders auf. Nichts wird automatisch deaktiviert.Sicherheit & Tier
Community-Tier (kein Pro-Gate). Kein Drittanbieter-IP-Echo, kein HTTP-Fetch fremder Domains (nur DNS). Override-Speichern berechnet die Server-IP-Warnung neu (Selbstheilungs-Schleife).
Tests
24 neue Feature-Tests grün (Service, Server-IP-Ableitung inkl. Loopback-/Resolver-unerreichbar-Pfade, Verify-State-Machine, Boot-Seed, Re-Verify-Reflag, Admin-API inkl. Unauth-Reject + TOKEN_FORBIDDEN, i18n, UI-Smoke).
api_settings48/48 ohne Regression. Alle Netz-Seams injizierbar → vollständig offline/deterministisch.Scope
Strikt Teilprojekt A: keine Änderungen an Routen (B) oder Portal (C).
🤖 Generated with Claude Code