- PHP 81.7%
- Twig 18.1%
- TypeScript 0.2%
HibpRangePasswordChecker kennt jetzt nur noch PSR-Interfaces: - Psr\Http\Client\ClientInterface (PSR-18) statt GuzzleHttp\ClientInterface - Psr\Http\Message\RequestFactoryInterface (PSR-17) fuer Request-Bau Timeout gehoert zur Client-Konfiguration, nicht zum Checker -> aus dem Konstruktor entfernt; Guzzle wird mit Timeout + HTTP_ERRORS=true in ContainerFactory und PasswordResetCommand als Konkrete eingesetzt. Laminas\Diactoros\RequestFactory als PSR-17-Implementierung (bereits transitiv im Vendor via laminas/laminas-diactoros). |
||
|---|---|---|
| docs | ||
| httpdocs | ||
| install | ||
| src | ||
| templates | ||
| tests | ||
| themes/default/src | ||
| .gitignore | ||
| .php-cs-fixer.dist.php | ||
| composer.json | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| phpstan.neon | ||
| phpunit.xml.dist | ||
| README.md | ||
| rector.php | ||
| tsconfig.json | ||
| vite.config.ts | ||
TowerDNS
TowerDNS ist ein providerunabhaengiges, DNS-zentriertes Management-Panel und der offizielle technische Nachfolger von desec-manager.
Vorgaenger und Migration
Vorgaengerprojekt:
- Selfhosted: https://git.diath.systems/DiamantTh/desec-manager
- GitHub: https://github.com/DiamantTh/desec-manager
Das bisherige Projekt desec-manager dient als Migrationsbasis. Die Weiterentwicklung erfolgt ausschliesslich in diesem Repository.
Zielbild
TowerDNS ist kein reiner Wrapper fuer einen einzelnen Anbieter. Das Projekt stellt eine gemeinsame Kernlogik fuer DNS-Verwaltung bereit und bindet Provider ueber eine abstrahierte, capability-orientierte Schnittstelle an.
Schwerpunkte:
- Verwaltung von Zonen, Records, TTL, Kommentaren, Tags und Metadaten
- Striktes Rollen- und Rechtesystem mit zentraler Pruefung in der Application-Schicht
- DNSSEC als eigener fachlicher Bereich, nicht als Sonderbehandlung am Rand
- Provideradapter fuer deSEC, PowerDNS, Cloudflare und INWX
Architektur
Layer:
- UI: einheitliche Oberflaeche ohne direkte Anbieterlogik
- Application/Core: providerneutrale Workflows, Validierung, Normalisierung und Rechtepruefung
- Provider-Abstraktion: gemeinsamer Vertrag und capability-orientiertes Modell
- Provider-Implementierungen: deSEC, PDNS, Cloudflare, INWX als getrennte Adapter
- Domain-Modell: kanonische Darstellung von DNS-Objekten inklusive DNSSEC
DNSSEC-Grundsatz
DNSSEC wird fachlich vollstaendig modelliert:
- Provider mit einfacher/automatischer DNSSEC-Abwicklung werden korrekt abgebildet
- Provider mit direkter DNSSEC-Steuerung bleiben detailliert steuerbar
- PowerDNS DNSSEC-Funktionen werden direkt an die PDNS-API angebunden
Rollen und Rechte
TowerDNS fuehrt ein feingranulares Berechtigungssystem ein:
- getrennte Rechte fuer Lesen, Anlegen, Aendern, Loeschen
- getrennte Rechte fuer DNSSEC-Aktionen
- getrennte Rechte fuer Provider-Credentials, Rollen/User und globale Admin-Funktionen
Rechtepruefungen sind zentral im Core und nicht nur in der UI.
Technische Basis
TowerDNS uebernimmt den Stack des Vorgaengerprojekts desec-manager und entwickelt ihn provider-neutral weiter:
- PHP >= 8.4, Composer (PSR-4 unter
TowerDNS\) - HTTP-Schicht: Mezzio (PSR-15) + FastRoute + PHP-DI
- Templates/Renderer: Twig via
mezzio-twigrenderer - Sessions/CSRF:
mezzio-session,mezzio-session-ext,mezzio-csrf - Validierung/Filter/Inputs: Laminas (
laminas-filter,laminas-validator,laminas-inputfilter,laminas-i18n) - RBAC-Bibliothek:
laminas/laminas-permissions-rbac(eigene Permission/Role-Domain dazu) - Persistenz: Doctrine DBAL (^3.7) wie in desec-manager
- HTTP-Clients: Guzzle 7
- Logging/Telemetrie: Monolog 3, Sentry 4
- Caching: Symfony Cache, PSR Simple Cache
- CLI/Mailer/Konfig: Symfony Console, Symfony Mailer,
yosymfony/toml - Authentifizierung: WebAuthn (
web-auth/webauthn-lib), TOTP (spomky-labs/otphp), Passwortpruefung (bjeavons/zxcvbn-php) - Frontend: Svelte 5 + Vite 6 + TypeScript (uebernommen aus desec-manager)
- Tests/Statisch: PHPUnit 11, PHPStan 2 (Level 8)
- Saubere Layer-Struktur unter
src/Domain,src/Application,src/Infrastructure,src/UI
Aktueller Stand
- providerneutrales Vertragsmodell mit
ProviderRegistryundCapability-Konstanten - kanonisches DNS- und DNSSEC-Modell (
Zone,Record,DnssecProfile,DnssecState) - RBAC mit zentraler Durchsetzung im
DnsManagementService(Permission + Capability) - Eingabevalidierung mit IDN-Normalisierung (
DnsNameValidator) und Record-Pruefung (RecordValidator) - deSEC-Adapter funktional aus desec-manager portiert (
DeSECApiClient,DeSECProvider) - PowerDNS-Adapter inkl. nativer DNSSEC-Steuerung (
cryptokeys-API) - Cloudflare- und INWX-Adapter als Skelette mit korrekt deklarierten Capabilities
- PHPUnit- und PHPStan-Konfiguration (Level 8), erste Tests fuer Validierung und Service
- AGPL-3.0-or-later, durchgaengig SPDX-Header in allen PHP-Dateien
Entwicklung
composer install
composer check # lint + phpstan + phpunit
npm install
npm run build # Svelte/Vite-Bundles -> themes/default/js/
Weiterfuehrende Dokumentation:
Naechste Schritte
- Cloudflare- und INWX-Adapter ausimplementieren
- Persistenz fuer Provider-Konfigurationen, User und Rollen anbinden
- HTTP-/UI-Layer auf den Application-Services aufsetzen
- Importpfad aus desec-manager-Datenbestaenden bereitstellen
Lizenz
GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later), siehe LICENSE.
SPDX-Identifier: AGPL-3.0-or-later.
TowerDNS ist der technische Nachfolger von desec-manager und uebernimmt dessen Copyleft-Charakter konsequent: Wer eine modifizierte Version als Netzwerkdienst betreibt, muss den entsprechenden Quellcode den Nutzern zugaenglich machen (AGPL §13).