Moe
90438a24af
docs: Hinweis auf Nachfolger mscadm/groundcontrol (ITSM lebt dort als Modul Service Desk weiter, ADR-010)
2026-07-28 16:15:41 +02:00
Moe
970cd24972
docs(betrieb): hPanel-Browser-Terminal als Server-Zugangsweg dokumentiert
2026-07-28 15:13:24 +02:00
Moe
fc6bc3028d
feat(plattform): Konzernplattform phase-001 (Module HR + CRM) + AES-Suite-Erweiterung committet
...
Konzernplattform (ADR-009, AES-Projekt projects/konzernplattform):
- Rollen hr_manager + crm_agent; PageCtx-Flags; Nav-Gruppen HR/CRM;
Untertitel 'Konzernplattform'
- Modul HR (nur admin + hr_manager, DSGVO/BDSG-sensibel): Mitarbeiterakte
(Stammdaten, Status Aktiv/Onboarding/Ausgeschieden), Abwesenheiten
(Urlaub/Krankheit/Sonderurlaub/Fortbildung) mit Genehmigungsworkflow
- Modul CRM (admin + crm_agent): Firmen (Lead/Kunde/Partner/Inaktiv),
Kontakte, Deals mit Pipeline-Stufen + Pipeline-Board, KPI-Kacheln
(Pipeline-Wert, Gewonnen gesamt)
- Schema-Migration 2026-07-15b (hr_employees, hr_absences, crm_companies,
crm_contacts, crm_deals; idempotent), alles tenant-gescoped + auditiert
Ausserdem: AES-Suite-Erweiterung (/erweiterungen/aes, Rolle aes_user,
src/extensions.rs) aus paralleler Session lag unkommittet im Arbeitsstand
und ist hier mit aufgenommen, damit das Clone-basierte Deployment sie nicht
verliert. Reparatur: schema.sql-Tail war erneut durch Sync-Abriss
verstuemmelt (Duplikat-Block entfernt).
Tests: cargo test 8/8, E2E-Smoke HR/CRM 19/19 (inkl. RBAC: agent ohne
HR/CRM-Zugriff, hr_manager ohne CRM/Admin-Zugriff).
2026-07-28 13:06:50 +02:00
Moe
97facdce18
docs: technische Dokumentation + ADRs
...
- docs/ARCHITEKTUR.md: Module, Datenmodell, Request-Fluss, RBAC-Matrix,
ITIL-Abbildung, Sicherheitsarchitektur
- docs/BETRIEB.md: ENV-Referenz, Deployment-/Update-Prozedur (SRV1361746),
Backup/Retention, Troubleshooting (inkl. Werkzeug-Hash-Diagnose,
Rate-Limit-Entsperrung), Monitoring-Punkte
- docs/adr/: ADR-001..008 (Rust-Rewrite, Server-Sessions, Hash-Migration
inkl. scrypt-Lehre, ITIL-Rollen/Change-Gate, idempotente Migrationen,
Multi-Stage-Build, CSP, SSRF-Policy) + Index
- README: Verweis auf docs/ und Prozess-Doku in mscadm/AES projects/itsm (dev)
2026-07-15 11:49:47 +02:00
Moe
f73239211c
fix(auth): Werkzeug-scrypt-Hashes verifizierbar (Bestandskonten-Login)
...
Die Flask-Version installierte Werkzeug ungepinnt; Werkzeug >= 3 erzeugt
standardmaessig scrypt-Hashes ('scrypt:32768:8:1$salt$hex') statt
pbkdf2:sha256. Bestandskonten aus dieser Aera (u. a. der Produktiv-Admin)
konnten sich nach dem Rust-Cutover nicht anmelden, weil verify_password nur
pbkdf2 und Argon2 kannte.
- security.rs: verify_werkzeug_scrypt() (Parameter aus dem Hash-String,
dklen aus der Digest-Laenge, Konstantzeit-Vergleich); wie bei pbkdf2 wird
beim ersten erfolgreichen Login transparent auf Argon2id rehasht
- Unit-Test mit gegen hashlib.scrypt reproduziertem Referenzvektor
- Cargo.toml: scrypt 0.11 (RustCrypto, ohne Default-Features)
2026-07-15 09:53:47 +02:00
Moe
9b8d603e74
feat(ui): Dashboard-Redesign nach Nutzer-Mockup + Kanban, Suche, Pagination, Bulk-Aktionen
...
Angleichung an das vorgegebene UI-Mockup (Nutzer-Vorgabe 2026-07-15):
- Sidebar-Gruppen Favoriten (Dashboard, Meine/Offene/Ueberfaellige Tickets),
Service Management (inkl. Kanban Board), Wissen (Artikel/FAQs), Assets
(Asset-Liste/Konfigurationselemente/Software/Vertraege via CMDB-Typfilter),
Administration; rundes Logo, Nutzer-Chip mit Avatar-Initialen + Rolle
- Topbar mit zentraler Suche (fuehrt zur Ticket-Suche)
- KPI-Karten mit Trend-Angabe und Sparkline (echte Tagesserien der letzten
8 Tage aus created/first_response/resolved/due-Zeitstempeln), zusaetzliche
Karte 'Durchschn. Antwortzeit' (Ø erste Reaktion, 30 Tage)
- Ticket-Tabelle: Checkbox-Spalte mit Alles-Auswahl, Aktionen-Dropdown
(Bulk-Statuswechsel, ITIL-Uebergaenge werden serverseitig erzwungen und
Verstoesse je Ticket gemeldet), Ticket-Nr.-Hervorhebung, Avatar-Initialen,
Pagination (12/Seite, '1-12 von N Tickets')
- Filter-Tabs inkl. Geschlossen; Suchfeld (Titel/Nr./Beschreibung),
Filter bleiben ueber Tabs/Pagination erhalten
- 'Neues Ticket' als Modal (Button oben rechts) statt Inline-Formular
- Detail-Panel wie Mockup: Kopf mit Ticket-Nr., Service-Block, Feldraster,
Tabs Details/Aktivitaeten/Anhaenge/Aufgaben (letzte zwei als Platzhalter
gekennzeichnet), SLA-Chips mit Restzeit/Ueberschreitung ('1h 32m
verbleibend' / 'um 2h ueberschritten'), Footer 'Status aendern'-Dropdown
(nur erlaubte ITIL-Uebergaenge) + 'Kommentar hinzufuegen'
- Kanban Board (/tickets/board): Spalten Offen/In Bearbeitung/Warten/Geloest
- CSP: style-src um 'unsafe-inline' ergaenzt (Inline-style-Attribute der
Templates, z. B. Fortschrittsbalken); Inline-Skripte bleiben verboten
Tests: cargo test 7/7, E2E-Smoke 39/39 (inkl. neuer UI-/Such-/Board-Checks).
2026-07-15 05:23:26 +02:00
Moe
7f9d2b431d
feat!: Rust-Rewrite (axum/PostgreSQL) mit ITIL-v3/v4-Prozessen und Sicherheits-Haertung
...
Komplette Neuentwicklung der Plattform in Rust (axum + tokio-postgres +
askama), ersetzt die Python/Flask-Version. Bestandsdaten bleiben nutzbar:
Schema-Migrationen laufen idempotent beim Start, alte Werkzeug-PBKDF2-
Passwoerter werden beim ersten Login transparent auf Argon2id migriert.
ITIL v3/v4:
- Rollenmodell: admin / change_manager / agent / user (Self-Service)
- Statusmodell mit erzwungenen Uebergaengen, Reopen, finalem Geschlossen
- Prioritaet automatisch aus Impact-x-Urgency-Matrix (v3 SO 4.2.5.4)
- Change Enablement: Standard/Normal/Emergency, CAB-Freigabe durch
change_manager/admin; Umsetzung und Repo-Edits erst nach Freigabe
- Problem Management: Incident-Problem-Verknuepfung, Known Error
- Service Request als eigene Kategorie; SLA-Zeitstempel (Reaktion/Loesung)
- Knowledge Management: Freigabe-Workflow (Entwurf -> Freigegeben)
- SACM: Ticket-CI-Verknuepfung; CSI-Dashboard (SLA-Erfuellung, MTTR)
Sicherheit (behebt Review-Befunde 2026-07-15):
- CSRF-Schutz fuer alle zustandsaendernden Requests (vorher: keiner)
- Login-Rate-Limit pro E-Mail+IP, DB-gestuetzt (vorher: keins)
- Serverseitige, widerrufbare Sessions (SHA-256-Token-Hash in DB) statt
Client-Side-Sessions mit optionalem Secret
- Argon2id statt PBKDF2; Passwort-Policy min. 12 Zeichen
- Repo-Edit aus Tickets: RBAC (change_manager/admin) + freigegebener
Change noetig; vorher jeder eingeloggte User mit Admin-Token
- SSRF-Guard fuer Service-Endpoints (Link-Local/Metadaten blockiert,
Anlegen admin-only), Erreichbarkeitscheck parallel + gecacht
- Security-Header (CSP ohne Inline-JS, X-Frame-Options, nosniff, HSTS)
- X-Forwarded-For nur bei konfigurierten Trusted Proxies (Audit-Log-IP)
- Open-Redirect im Login-next-Parameter geschlossen
Deployment: Multi-Stage-Dockerfile statt git-clone+pip beim Container-
Start (reproduzierbare Images, kein ungetesteter main-Stand in Prod).
Tests: 7 Unit-Tests (Statusmodell, Matrix, Change-Gate, Hash-Verifikation,
SSRF-Guard) + 30 End-to-End-Smoke-Tests gegen lokalen PostgreSQL gruen.
2026-07-15 05:02:02 +02:00
Moe
6d7c511ea7
feat(app,db): Repo-Bearbeitung aus Tickets heraus ueber Forge-Contents-API mit zwingender Worklog-Dokumentation (phase-008-itsm-repo-audit)
...
- forge_client.py: schlanker HTTP-Client fuer Forge-Contents-API (get/update),
FORGE_BASE_URL + FORGE_SERVICE_TOKEN als Config
- db.log_repo_edit: schreibt Worklog-Eintrag in ticket_timeline
- app.py: /api/tickets/<id>/repo-file (laden), /tickets/<id>/repo-edit (speichern) --
schlaegt der Worklog-Eintrag fehl, wird trotz bereits erfolgtem Forge-Commit
KEIN Erfolg gemeldet (siehe project.yaml phase-008), Commit-Sha wird dennoch
fuer manuelle Nachbearbeitung geloggt
- Ticket-Detail-Panel (JS): neue Sektion zum Laden/Bearbeiten/Committen einer
Repo-Datei direkt aus dem Ticket
2026-07-15 04:03:51 +02:00
mscadm
cc2232746a
feat(services): Live-Erreichbarkeitspruefung fuer gebuchte Services im Katalog
...
Bisher war _aes_live_status() geschrieben, aber nirgends im Service-Katalog
eingebunden (totes Code). Jetzt generisch als _service_live_status(endpoint)
fuer alle gebuchten Services mit Endpoint (nicht nur AES) und im Katalog als
Badge sichtbar: 'gebucht . erreichbar' / 'gebucht . nicht erreichbar' /
'gebucht' (kein Endpoint). Schliesst die Luecke aus Task #69 .
2026-07-13 17:23:28 +00:00
mscadm
295cdb1374
chore: temporaeres QA-Seed-Skript 4 wieder entfernen
2026-07-13 16:10:08 +00:00
mscadm
9ab775f6e5
chore: temporaeres QA-Seed-Skript 4
2026-07-13 16:06:25 +00:00
mscadm
57b532cbec
feat: E-Mail-Adresse bestehender Benutzer aenderbar (mit Eindeutigkeits-Pruefung + Audit-Log)
2026-07-13 16:04:15 +00:00
mscadm
c2b341316b
feat: E-Mail-Adresse bestehender Benutzer aenderbar (mit Eindeutigkeits-Pruefung + Audit-Log)
2026-07-13 16:04:14 +00:00
mscadm
44c5f3089b
chore: temporaeres QA-Seed-Skript 3 wieder entfernen
2026-07-13 15:57:08 +00:00
mscadm
a711ab6bd6
chore: temporaeres QA-Seed-Skript 3
2026-07-13 15:53:53 +00:00
mscadm
fc08649626
fix: einheitliches Input-Styling (CSS) + Neuen-Benutzer-Formular als aufklappbarer '+'-Button
2026-07-13 15:52:18 +00:00
mscadm
8227eb5110
chore: temporaeres QA-Seed-Skript 2 wieder entfernen
2026-07-13 15:48:06 +00:00
mscadm
56cf8ec4cc
chore: temporaeres QA-Seed-Skript 2 fuer Feature-Verifikation
2026-07-13 15:44:27 +00:00
mscadm
ce90a2bd32
feat: Nutzerdetails (Telefon/Adresse) + Formular-Fix bei Passwortfehler in /admin/users
2026-07-13 15:43:10 +00:00
mscadm
13616c9006
feat: Nutzerdetails (Telefon/Adresse) + Formular-Fix bei Passwortfehler in /admin/users
2026-07-13 15:43:09 +00:00
mscadm
91f6cd82e4
feat: Nutzerdetails (Telefon/Adresse) + Formular-Fix bei Passwortfehler in /admin/users
2026-07-13 15:43:08 +00:00
mscadm
6fcc83aa4e
chore: temporaeres QA-Seed-Skript wieder entfernen
2026-07-13 15:37:32 +00:00
mscadm
7070ec4c49
chore: temporaeres QA-Seed-Skript fuer Feature-Verifikation
2026-07-13 15:32:11 +00:00
mscadm
a07cbb77ab
feat: Nutzerverwaltung + CMDB + Wissensdatenbank (Grundgeruest)
2026-07-13 15:28:55 +00:00
mscadm
8c089d4f67
feat: Nutzerverwaltung + CMDB + Wissensdatenbank (Grundgeruest)
2026-07-13 15:28:53 +00:00
mscadm
b802d252ba
feat: Nutzerverwaltung + CMDB + Wissensdatenbank (Grundgeruest)
2026-07-13 15:28:52 +00:00
mscadm
99a9761901
feat: /setup/new nach erster Registrierung sperren (Ersteinrichtung einmalig)
2026-07-13 15:16:46 +00:00
mscadm
fe11241c18
fix: Formularwerte bei /setup/new bei Validierungsfehler erhalten
2026-07-13 15:11:57 +00:00
mscadm
8378296b6e
Deploy: taeglicher pg_dump-Backup ausserhalb des Containers (Host-Verzeichnis, Rotation 14 Tage)
2026-07-13 14:57:51 +00:00
mscadm
da70bbfac3
Fix: run_retention_cleanup fehlte im vorherigen Push (Fehler mit stale Datei behoben)
2026-07-13 14:55:57 +00:00
mscadm
6720a8a3c8
run_retention_cleanup(): loescht abgelaufene Tickets/Audit-Log gemaess Mandanten-Einstellungen
2026-07-13 14:52:19 +00:00
mscadm
86d2cf4c4a
Retention-Cleanup-Job (automatische Aufbewahrungsfrist-Bereinigung, Advisory-Lock)
2026-07-13 14:52:17 +00:00
mscadm
7c24951db7
Deploy: bootstrap.sh installiert requirements.txt, kopiert db.py/schema.sql
2026-07-13 12:24:42 +00:00
mscadm
70880a7e20
Deploy: docker-compose.yml mit PostgreSQL-Service
2026-07-13 12:24:41 +00:00
mscadm
265188a136
Requirements: flask, gunicorn, psycopg2-binary
2026-07-13 12:24:40 +00:00
mscadm
32ed7d55bc
DB-Schema: tenants/users/services/tickets/timeline/audit_log
2026-07-13 12:24:39 +00:00
mscadm
c516df7650
Datenzugriffsschicht PostgreSQL
2026-07-13 12:24:38 +00:00
mscadm
ccfd1614a5
PostgreSQL-Migration: Mandantenfaehigkeit, Ersteinrichtung, Audit-Log (ISO27001/DSGVO/NIS2)
2026-07-13 12:24:37 +00:00
mscadm
28b8b04a68
Deploy: bootstrap.sh fuer ITSM-App
2026-07-13 12:04:04 +00:00
mscadm
ee3130e641
Deploy: docker-compose.yml fuer ITSM-App
2026-07-13 12:04:04 +00:00
mscadm
b2fb8bffcc
Initial ITSM Flask-Grundgeruest (Tickets, Service-Katalog, Sidebar-Shell)
2026-07-13 12:00:14 +00:00
mscadm
f14369f433
Initial commit
2026-07-13 11:51:19 +00:00