Skip to content

feat(domains): zentrale verifizierte Domain-Registry (Teilprojekt A) - #177

Merged
CallMeTechie merged 10 commits into
masterfrom
feature/domain-registry
Jun 24, 2026
Merged

CallMeTechie merged 10 commits into
masterfrom
feature/domain-registry

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

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

  • Migration 58domains-Tabelle (id, domain UNIQUE, status, resolved_ip, last_error, verified_at, last_checked_at, created_at).
  • domains-Service — Server-IP-Ableitung (Override → GC_WG_HOSTGC_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. Exponiert listVerified()/baseDomains()/isVerified() für spätere Specs.
  • Boot-Pass — best-effort, nicht-blockierend: seedet Basis-Domains aus bestehenden Routen und verifiziert sie nicht-alarmierend (Zeilen bleiben pending, nie failed beim Boot; ≥2-all-mismatch-Guard setzt eine „Server-IP prüfen"-Warnung).
  • Admin-API /api/v1/settings/domains — Session-Auth wie die anderen Settings-Cluster; /^\/domains(\/|$)/ in TOKEN_FORBIDDEN (kein API-Token darf Domains verwalten); net.isIP-Validierung des Overrides; nur parametrisiertes SQL.
  • i18n (en + de) und Domains-Sektion im Allgemein-Tab aller drei Themes (aurora/default/pro) + settings.js-Verdrahtung (DOM-sicheres Rendering, keine hardcodierten Strings).

Semantik (ehrlich)

verified bedeutet „öffentliches DNS zeigt auf diese Server-IP" — nicht „wird bedient/Cert kommt". Transiente Zustände (Resolver unerreichbar, Server-IP unbekannt, Timeout) → pending, nie failed. Per-Domain failed nur 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_settings 48/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

@CallMeTechie
CallMeTechie merged commit c30058b into master Jun 24, 2026
8 checks passed
@CallMeTechie
CallMeTechie deleted the feature/domain-registry branch June 24, 2026 19:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant