From eec5de404a1191f5fad4035a69f10e43c5c3221d Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Fri, 25 Sep 2026 13:30:31 +0000 Subject: [PATCH] feat(platzhalter): Aufloesung, Namensregeln und Shell-Maskierung (#26) --- CHANGELOG.md | 19 + docs/architektur.md | 26 + docs/devlog.md | 57 +- docs/issues/012-platzhalter-namensregeln.md | 109 +++- docs/issues/README.md | 4 +- src/lib/namensregeln.ts | 550 +++++++++++++++++++ src/lib/passwort.ts | 117 +++++ src/lib/platzhalter-werte.ts | 136 +++++ src/lib/platzhalter.ts | 31 ++ src/lib/shell.ts | 341 ++++++++++++ src/lib/vorlagen-format.ts | 15 +- src/server/services/befehle.ts | 367 +++++++++++++ src/server/services/einstellungen.ts | 19 +- src/server/services/platzhalter.ts | 221 ++++++++ tests/befehle.test.ts | 423 +++++++++++++++ tests/namensregeln.test.ts | 553 ++++++++++++++++++++ tests/passwort.test.ts | 138 +++++ tests/platzhalter-anzeige.test.tsx | 51 ++ tests/platzhalter-werte.test.ts | 175 +++++++ tests/platzhalter.test.ts | 489 ++++++++++++----- tests/shell.test.ts | 394 ++++++++++++++ 21 files changed, 4069 insertions(+), 166 deletions(-) create mode 100644 src/lib/namensregeln.ts create mode 100644 src/lib/passwort.ts create mode 100644 src/lib/platzhalter-werte.ts create mode 100644 src/lib/shell.ts create mode 100644 src/server/services/befehle.ts create mode 100644 src/server/services/platzhalter.ts create mode 100644 tests/befehle.test.ts create mode 100644 tests/namensregeln.test.ts create mode 100644 tests/passwort.test.ts create mode 100644 tests/platzhalter-anzeige.test.tsx create mode 100644 tests/platzhalter-werte.test.ts create mode 100644 tests/shell.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index bd3a21c..0addc2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -84,6 +84,16 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/). Anführungszeichen und Zeilenumbrüchen im Wert zurecht (#011) - Die Seitenleiste führt Personen und Geräte unter einem Eintrag; ein Umschalter wechselt zwischen beiden Listen (#011) +- Platzhalter werden aufgelöst: eingebaute Werte aus Gerät, Lauf, Mitarbeiter und Abteilung, dazu + die Variablen der Vorlage. Ein unbekannter Platzhalter bleibt sichtbar stehen, statt still zu + verschwinden (#012) +- `{{ou}}` einer Person aus dem Verzeichnis ist der Eltern-Container ihres DN — genau der Pfad, den + ein `New-ADUser -Path` braucht (#012) +- Namensregeln für `upn`, `sam`, `mail` und `hostname` mit Transliteration, `{v}`, `{nnn}` und + `{kundenkuerzel}`; im Modus Dienstleistung überlagern Kundenregeln die globalen Feld für Feld + (#012) +- „Alle Befehle als Skript kopieren“ je Abschnitt: die Befehle in Reihenfolge, je mit einer + Kommentarzeile darüber und dem Zeilenumbruch der jeweiligen Shell (#012) ### Sicherheit @@ -140,3 +150,12 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/). - Ein Gerät, an dem Läufe hängen, lässt sich nicht löschen, nur archivieren (#011) - Der Tag-Code entsteht beim Anlegen, steht sofort im Vergabebuch und lässt sich nie ändern — beides in einer Transaktion, damit kein Code ohne Eintrag entsteht (#011) +- Werte werden für die jeweilige Shell maskiert, bevor sie in einen Befehl kommen: PowerShell + verdoppelt `"` und Backtick und entschärft `$`, Bash setzt einfache Anführungszeichen. Für Cmd + wird ein Wert mit `"` oder Zeilenumbruch **abgelehnt** statt unsicher maskiert — dort gibt es + keine Regel, die in jedem Fall stimmt (#012) +- `{{generiertes_passwort}}` entsteht bei jeder Anzeige neu, besteht aus 20 Zeichen ohne + verwechselbare Buchstaben und wird nirgends gespeichert; in der Druckansicht steht + `[Passwort – nicht gespeichert]` (#012) +- Ein eingesetzter Wert wird nicht doppelt maskiert: React maskiert Textknoten selbst, und ein Test + am gerenderten HTML hält fest, dass ein `", + }); + const html = renderToStaticMarkup(

{text}

); + expect(html).not.toContain("