Stand: 2026-04-23 | Ziel-MVP: Ende April / Mitte Mai 2026
- LDAP testen — Integration mit echtem AD testen (LDAP_URL, LDAP_BIND_DN, LDAP_USER_BASE, LDAP_ADMIN_GROUP)
- Checkmk-Auth testen — Login via CMK REST API verifizieren
- CMK-SSL-Verify konfigurierbar —
verify=Falsebei allen CMK-REST-Aufrufen durchCMK_SSL_VERIFY-Env-Var ersetzt (Default weiterhinfalse,truefür Produktivbetrieb empfohlen) ✅ (2026-04-23) - Login-Rate-Limiting — max.
LOGIN_MAX_ATTEMPTS(Default 5) Fehlversuche pro IP+Benutzername innerhalbLOGIN_WINDOW_SECONDS(Default 60s), danach HTTP 429; In-Memory-Zähler insrc/main.py✅ (2026-04-23)
- Rule Packs — Regelgruppen mit Name + Contact-Group verwalten, beim Export auf
pack_idmappen ✅ (2026-04-05) - Dynamische Suchregel — Node-Typ
hostregex/serviceregexmit Regex-Pattern; Export alshost_search/service_search✅ (2026-04-05) - Preview-Modal — echte States vom Backend laden (CMK Livestatus / REST-API) und auf Canvas highlighten
- Unresolved-Objects-Modal — nach Validierung unbekannte Hosts/Services anzeigen
- Waypoint-Handles bei Bézier-Modus nach Layout-Wechsel zurücksetzen
- Snap-Grid-Größe konfigurierbar machen (10 / 20 / 40 / 80 px, persistent)
- pytest Backend-Tests (user_store, auth_manager, API-Endpoints) — ~50 Fälle
- Vitest Frontend-Tests (geometry, cmk-converter, auth) — ~50 Fälle
- pytest.ini, vitest.config.js, package.json
- Passwort-Änderung im UI (Key-Button, Modal,
/me/password) - Session-Ablauf: JWT-Expiry-Timer (60s vor Ablauf → Login-Modal automatisch)
- Abgelaufenes Token beim Start aus localStorage verworfen
-
struktur.txtentfernt (veraltet)
- JWT-Authentifizierung (PyJWT, HS256, 8h Ablauf, Secret persistent)
- Lokale Benutzer (PBKDF2-SHA256, data/users.json, Default-Admin)
- LDAP-Authentifizierung (ldap3, LDAP_BIND_DN, LDAP_ADMIN_GROUP)
- Checkmk-Authentifizierung (REST-API, Rollen-Ermittlung)
- Auth-Kette: lokal → LDAP → Checkmk
- FastAPI Dependencies:
require_auth,require_admin -
AUTH_ENABLED=false→ alle Endpoints ohne Login, anonymous-Admin - Letzter-Admin-Schutz beim Löschen
- Frontend:
auth.js(Token, apiFetch, 401-Handler) - Frontend:
login.js(Login-Modal, Badge-Update) - Frontend:
admin-ui.js(Benutzerverwaltung-Modal) - index.html: Admin-Button, Logout-Button, user-badge-role
- toolbar.js: apiFetch für save/validate
- Export als Checkmk BI Pack JSON (
exportToCMK) - Import von Checkmk BI Pack JSON (
importFromCMK) inkl. Auto-Layout - Alle CMK Node-Typen gemappt:
state_of_host,state_of_service,host_search,service_search,call_a_rule - Aggregationsfunktionen:
worst,best,count_ok
- Host-Gruppe (
hostgroup) - Service-Gruppe (
servicegroup) - Andere BI (
bi) mitbiRef-Feld und↗ label-Anzeige auf Node
- Dark / Light Theme Toggle (persistent in localStorage)
- Node-Labels im Light Mode: dunkelgrau (
#333333) - Pfeilstile: Keiner (—), Chevron (▶), Thin (›), Dot (●)
- Pfeilgröße: Klein / Mittel / Groß (SVG-Marker mit viewBox-Skalierung)
- Gerundete Ecken bei orthogonalen Kanten (Quadratic-Bézier, r=14px)
-
Dockerfile(nginx + Frontend) -
Dockerfile.backend(FastAPI / uvicorn) -
docker-compose.ymlmit Volume für persistente Daten - nginx Reverse-Proxy für API-Endpoints
-
.dockerignore,.gitignore
- Ports (4 Port-Dots, Port-Drag,
fromPort/toPortin Edge) - Inspector ausbauen (Farb-Picker, Autocomplete, Routing-Toggle, Layer-Select)
- Layers-UI (Layer-Liste, toggle/lock, Node-Zuweisung)
- Connect-Modus (Tooltip, Rechtsklick-Abbrechen)
- Multi-Select (Shift+Klick, Marquee, ESC)
- Inline-Edit (Doppelklick)
- Align & Distribute
- Waypoint-Editing
- Grid-Snap & Snaplines
- Preview-Modal (Mock)
- Undo/Redo (100 Schritte)
- Kontextmenü (Node & Edge)
- Edge-Routing: Gerade / Bézier umschaltbar
- Auto-Layout (TD / LR / GRID) mit Barycenter-Minimierung
- Orthogonale Waypoints + Skip-Layer-Bypass nach Layout
- Zoom zur Mausposition
- Performance: RAF-Throttling, Viewport-Culling, DOM-Pooling
- Audit-Log (in-memory, localStorage, CSV-Export)
- Benutzername / User-Badge
- ES-Modul-Refactoring (20 Module, kein Build-Tool)
- Save/Load (FastAPI-Backend + localStorage-Fallback)
- Graph-Validierung (Zyklen-Erkennung per Kahn's Algorithm)