TLS-Gate v3.8.0: Dashboard-Seite mit Kacheln aus Stammdaten (nur lesend)
Von: Branko → OZMAI
Stand: 6. Oktober 2026
Typ: EXTERNAL_SOURCE (Inbox-Regel §3 — keine automatische Geltung, kein Brain-Status)
Charakter: STAND + NACHTRAG. Setzt 2026-10-06_TLS-GATE-DEMO-STAMMDATEN-MOCKUP-SQL-UND-BEFUND-UNIQUE-NULL-NACHTRAG_BRANKO.md fort. Ersetzt eine Aussage dieser Datei: Dort steht „Es gibt noch keine Dashboard-Seite“ (§2 und §5). Seit v3.8.0 gibt es eine, aber nur lesend und ohne Sperre (siehe §1 und §3). Alles andere gilt unverändert.
Quelle: Repo TLS-Gate-Mock-Pipeline (git.crumbforest.org). Tag v3.8.0 = Commit 8c50578 (Vorgänger v3.7.0 = be42eff).
Belege: tests/test_dashboard_tiles.sh (27), docker_vm/tests/run.sh (58, davon 6 neu gegen MariaDB), p3 48, p4 54, p5 31, p6 22 grün nach Neubau.
Legende: ✅ real/gebaut · 🧪 gebaut, getestet, nicht live · 🛠 spezifiziert · ⬜ OPEN · ❓ UNKNOWN
Keine Zugangsdaten, keine Kunden-Domains, keine Reseller-IDs (Demo-Daten: *.invalid).
1. Was gebaut ist
- 🧪
public/dashboard.php(nur lesend, kein POST, strikte CSP, kein Inline-JS) undsrc/Modules/Tiles.php(reine Auswertung, schreibt nichts, kein Audit). Kopfzeile verlinkt „Dashboard“. Die SSL-Konsoleindex.phpbleibt unverändert und weiter das Ziel nach dem Login. - 🧪 Drei Teile, alle aus den Stammdaten der eigenen Gruppe:
- Kette: Zustände aus
Chain::status, nur Anzeige, die Seiten werden dadurch nicht gesperrt. - Module: vorhandene Seiten (SSL-Konsole, SOAP-Zugänge, Benutzer, Audit, 2FA) mit Schnelllink; sichtbar nach Rolle, SSL-Konsole nur Gruppentyp
eigen(wieAuth::sslAllowed()). Nicht erlaubte Kacheln ohne Link. - Produkte: je aktive Freigabe eines aktiven Produkts der eigenen Gruppe:
readyoderpending(„noch n min/Std/Tage“), Verbrauch der jüngsten Periode, Preisreferenz, SOT-Verweis. - ✅ Preis: Es wird nur die Referenz (
price_ref) angezeigt, nie ein berechneter Preis. - 🧪 Test mit Demo-Daten:
mockup_freigaben_fuer_gruppe.sqlgibt einer bestehenden Gruppe die Demo-Produkte frei (Klicktest mit echtem Konto aufozm03).
2. Was die Prüfungen belegen
- 🧪 Gruppentrennung (crew sieht kein NetBox, kunde keinen Container), deaktivierte Freigabe bei aktivem Produkt erscheint nicht, Start in der Zukunft =
pending, Produktname mit<script>wird maskiert, Seite ohne Anmeldung leitet auflogin.phpum. - 🧪 Gegenprobe mit drei absichtlich kaputten Fassungen (inaktive Freigabe sichtbar, Link für jedes Produkt, Name ohne Maskierung): je rot. Die erste Fassung hat der Test zunächst nicht bemerkt: die Demo-Daten enthielten nur den Fall „Produkt inaktiv“, nicht „Freigabe inaktiv“. Der Fall wurde ergänzt, dann war die Fassung rot. Das ist die Lücke, die ohne die Gegenprobe geblieben wäre.
- 🧪 Gegen MariaDB (
run.sh): Freigabe einfügen, Kachel erscheint mit Preisreferenz und Link auf die Konsole, Freigabe entfernen, Kachel verschwindet. - ❓ Nicht belegt: Aussehen im Browser (CSS), die Seite wurde nicht von Hand geklickt; ein Login mit TOTP gegen
ozm03lief nicht automatisiert.
3. Vorläufige Festlegungen (NICHT von der Crew bestätigt)
| Festlegung | Quelle |
|---|---|
Ein Produkt hat noch kein Ziel-Feld; verlinkt wird nur ssl → index.php, und nur wenn verfügbar. Alle anderen Kacheln zeigen „kein Ziel hinterlegt“ statt eines erfundenen Links |
Annahme des Entwicklers (products.target_url ist im Entwurf offen) |
| Dienste (NetBox, Container, qdrant) erscheinen als Kachel ohne Link | Annahme des Entwicklers |
| Die Kette wird angezeigt, aber nicht erzwungen | Vorgabe aus v3.6.0 („in keiner Seite verdrahtet“) |
| Rolle bestimmt die Modulkacheln, nicht die Kette | Annahme des Entwicklers |
4. Einordnung als Prüffall (Branko, nicht OZMAI-Geltung)
Eine Kachel „verfügbar“ ist Anzeige, keine Berechtigung: Wer die Kachel sieht, hat damit keinen Zugang zu einem Dienst erlangt, und die Anzeige erzeugt keine stärkere Bindung. Im Sinn des Identitäts-Prüffalls bleibt Zugang eine Aussage der Seite selbst (Rolle, Gruppe, Audit), nicht der Darstellung. ❓ Mit der Crew nicht besprochen.
5. Offene Punkte
- ⬜ Weiterleitung nach dem Login auf das Dashboard (heute landet man auf der SSL-Konsole).
- ⬜ Zielfeld
products.target_urlund wer es pflegt; ohne es bleiben die Dienstkacheln ohne Link. - ⬜ Kette als Sperre verdrahten (
Chain::requireModule); Entscheidung steht aus, obschluesselfür Hosting Voraussetzung sein soll. - ⬜ Kategorie-Layer, Domains und Orders (Entwurf, Fragen an die Crew).
- ❓ Klicktest im Browser steht aus.