OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

README.md

33 KB
<div align="center">

<!-- Header Banner -->
<img src="public/icons/icon-512.svg" alt="OpenNIT Logo" width="120">

# OpenNIT

### Revisionssicheres IT-Dokumentations- & Asset-Management

*Self-Hosted. Audit-Ready. Open Source.*

---

[![PHP 8.2+](https://img.shields.io/badge/PHP-8.2%2B-777BB4?style=for-the-badge&logo=php&logoColor=white)](https://www.php.net/)
[![MySQL / MariaDB](https://img.shields.io/badge/MySQL%20%7C%20MariaDB-4479A1?style=for-the-badge&logo=mysql&logoColor=white)](https://www.mysql.com/)
[![License: AGPL-3.0](https://img.shields.io/badge/Lizenz-AGPL--3.0-blue?style=for-the-badge&logo=gnu&logoColor=white)](LICENSE)

[![ISO 27001 Ready](https://img.shields.io/badge/ISO_27001-Ready-28a745?style=flat-square&logo=shield&logoColor=white)](#audit--compliance)
[![BSI Grundschutz](https://img.shields.io/badge/BSI_Grundschutz-Ready-28a745?style=flat-square&logo=shield&logoColor=white)](#audit--compliance)
[![SOC 2](https://img.shields.io/badge/SOC_2-Ready-28a745?style=flat-square&logo=shield&logoColor=white)](#audit--compliance)

[![Self-Hosted](https://img.shields.io/badge/Self--Hosted-Ja-informational?style=flat-square)](#)
[![Hash-Chain Audit](https://img.shields.io/badge/Audit--Log-Hash--Chain-critical?style=flat-square)](#audit-funktion)
[![AES-256-GCM](https://img.shields.io/badge/Verschl%C3%BCsselung-AES--256--GCM-blueviolet?style=flat-square)](#sicherheit)
[![MFA: TOTP + WebAuthn](https://img.shields.io/badge/MFA-TOTP_%2B_WebAuthn-orange?style=flat-square)](#authentifizierung)

<br>

[Installation](#installation) · [Features](#features) · [Module](#module) · [Screenshots](#screenshots) · [Dokumentation](#weiterführende-dokumentation) · [Lizenz](#lizenz)

---

</div>

<br>

<div align="center">

![OpenNIT Dashboard](docs/screenshots/dashboard.png)

<sub>Das konfigurierbare Dashboard mit Widgets für Tickets, To-Dos, Monitoring und Schnellzugriff. Weitere Ansichten unter [Screenshots](#screenshots).</sub>

</div>

<br>

## Warum OpenNIT?

| | |
|---|---|
| **Revisionssicher** | Unveränderlicher Audit-Log mit kryptografischer Hash-Chain — jede Änderung ist nachvollziehbar und manipulationsgeschützt |
| **Alles an einem Ort** | Assets, Verträge, IP-Adressen, Tickets, Passwörter, Dokumentation — keine Tool-Fragmentierung |
| **Selbst gehostet** | Volle Kontrolle über Daten und Infrastruktur. Kein Cloud-Zwang, kein Vendor-Lock-in |
| **Compliance-Ready** | Gebaut für ISO 27001, BSI-Grundschutz und SOC 2 Audits |
| **Modular** | 25+ Module — aktiviere nur, was du brauchst |

---

## Features

<table>
<tr>
<td width="50%" valign="top">

### Dokumentation & Wissen

- Hierarchische Themenstruktur (Topics & Pages)
- Versionsverlauf mit Diff-Vergleich & Wiederherstellung
- Rich-Text-Editor mit Bildverwaltung
- Seitensperrung bei gleichzeitiger Bearbeitung
- Netzwerkdiagramme via draw.io (self-hosted)
- Review-Workflow mit konfigurierbaren Intervallen
- Volltextsuche, Tags, Seitenvorlagen
- Modulübergreifende Suche (Header-Dropdown & `/search`)
- PDF- & ZIP-Export (AES-256-verschlüsselt)

</td>
<td width="50%" valign="top">

### Audit & Compliance

- Unveränderlicher Audit-Log mit Hash-Chain
- Mikrosekunden-genaue Zeitstempel
- Vollständige Alt-/Neu-Wert-Erfassung
- Risikobewertung pro Ereignis (low → critical)
- 10 Jahre Aufbewahrung (konfigurierbar), optionaler revisionssicherer Aufbewahrungs-Purge
- Hash-Chain-Verifikation (Manipulationserkennung) + optionale periodische Integritätsprüfung mit Alarm
- Optionale SIEM-/Log-Weiterleitung der Audit-Events (HTTPS-Webhook / Syslog)
- Audit-/Compliance-Bericht (ISO 27001 / BSI / DSGVO / GoBD) mit Live-Kennzahlen als PDF
- CSV/PDF-Export des Audit-Logs

</td>
</tr>
<tr>
<td valign="top">

### Asset-Management & Inventar

- IT-Asset-Inventar mit benutzerdefinierten Feldern
- Hersteller-DB mit Support-URLs
- Garantie-Abfrage (Dell, HP, HPE) — Dell gestaffelt per Scheduler, vorab gespeichert
- Erweiterte Filter, gespeicherte Ansichten & CSV-Export
- Datei-Anhänge pro Gerät
- Geräteübergabe mit digitalem Signatur-Workflow
- PowerShell-Sync (Hardware-Inventarisierung), GLPI-Import, Standortverwaltung
- MDM-Import: Microsoft Intune & Relution (Geräteabgleich, Hardware-Anreicherung, Richtlinien-Tab, unbekannte Geräte)
- Etikettendruck (QR-Code / Barcode, DYMO-Label-Formate)
- Leihgeräte mit Gruppen-Ausleihe, Überfälligkeits-Alerts, Leih-/Rückgabeschein (PDF) & Self-Service-Reservierung mit Freigabe-Workflow

</td>
<td valign="top">

### Sicherheit & Passwörter

- AES-256-GCM Passwort-Vault (persönlich + Team)
- PBKDF2-Schlüsselableitung, Session-only Keys
- TOTP für gespeicherte Zugangsdaten
- Browser-Erweiterung (Token-basiert)
- MFA: TOTP + WebAuthn/FIDO2 – optional erzwingbar (Admins oder alle lokalen Konten)
- Optionale Anmeldesicherheit: Passwort-Richtlinie & Account-Lockout (im Backend konfigurierbar)
- OAuth2 / OpenID Connect (Azure AD / Entra ID)
- CVE-Tracker für eingesetzte Software (NVD + optional BSI CERT-Bund)
- Abhängigkeits-Audit (`composer audit`) + SBOM automatisch in der CI

</td>
</tr>
<tr>
<td valign="top">

### Netzwerk & Infrastruktur

- IPAM: Subnetz-Verwaltung, DHCP-Bereiche, IP-Tracking
- Netzwerk-Scan per Web-Oberfläche oder Remote-Scan-Agent (Linux/Windows): Hostnamen, MAC, offene Ports, Banner, Gerätetyp- & Gateway-Erkennung
- DNS-Zonen-Import vom Windows-DNS per PowerShell-Agent (Zonen & Records)
- SSL/TLS-Zertifikat-Monitoring mit Ablaufwarnung
- Monitoring-Integration (Multi-Source): Zabbix, Prometheus Alertmanager, Grafana, Uptime Kuma, Checkmk/PRTG (generisch)
- UniFi-Controller-Integration (Multi-Site, Voucher, Auto-Sync)
- Veeam & Proxmox Backup Server (PBS) Backup-Überwachung
- Netzwerkdiagramme (draw.io)
- VMware vSphere / Hyper-V / Proxmox VE Integration

</td>
<td valign="top">

### Produktivität & Workflows

- **Ticketsystem** mit E-Mail-Eingang/-Ausgang (IMAP/SMTP, Microsoft 365 Graph/XOAUTH2 oder Google Workspace OAuth) & Multi-Bearbeiter
- Antwortvorlagen, Linked Tickets (Verknüpfen / Duplikat / Blockiert), Merge
- Wiedervorlage (Snooze): Tickets bis zu einem Datum aus „Mein Bereich" ausblenden, danach automatisch zurückholen
- Schnellaktionen aus dem Ticket: Bestellung, Änderung (ConfigLog), UniFi-Voucher und Leihgerät-Reservierung
- Automatische Zuweisung (Round-Robin über verfügbare Bearbeiter und/oder Standard-Bearbeiter pro Kategorie)
- SLA-Tracking pro Priorität, optional mit Pause bei „Warteschlange" und Geschäftszeiten-Kalender (Wochenplan + Feiertage)
- SLA-Eskalation bei Fristüberschreitung (Benachrichtigung, Markierung, Priorität anheben)
- In-App-/Web-Push-Benachrichtigungen für Bearbeiter (Zuweisung, Kundenantwort, Eskalation)
- Eigene Felder (Custom Fields) global oder pro Kategorie
- Aufwandserfassung (Live-Stoppuhr mit globaler Pill oder manuelle Minuten)
- CSAT-Bewertung nach Close mit anpassbarer öffentlicher Seite
- Kanban-Boards für Projekte
- **Anträge & Genehmigungen**: modularer Baukasten für Approval-Prozesse (Onboarding, Offboarding, Mobiles Arbeiten, Software-Einführung, Employee Change) – Vorlagen mit Formular-Builder (Abschnitte, bedingte Felder, Validierung), mehrstufige & parallele Stationen, Genehmiger per Rolle/Abteilung/Vorgesetztem oder externem Magic-Link (ohne Login), Fulfillment via Tickets/Kanban, Vertretung, Fristen/Eskalation, PDF-Nachweis & DSGVO-Anonymisierung
- Persönliche To-Do-Listen
- Vertragsverwaltung mit Auto-Erinnerungen, automatischer Verlängerung und einheitlicher Monatskosten-Anzeige (vergleichbar über alle Abrechnungsintervalle)
- Bestell-Board mit Status-KPIs, optionaler Teil-Lieferung, Weiterleiten per E-Mail, CSV-Export und Asset-Übernahme aus der Bestellung
- Budgetverwaltung mit Jahresbudgets, Soll-Ist-Vergleich und Belegen (Vorschau, Brutto/Netto)
- Fristen-Cockpit: modulübergreifende Übersicht aller Termine & Fristen, mit optionalem wöchentlichem E-Mail-Digest
- Wartungskalender mit Serienterminen
- Umschaltbare Icon-Darstellung im gesamten Frontend (monochrome Font-Awesome-Icons ↔ bunte Emojis)
- Datei-Explorer: Versionierung, Papierkorb, ordnerbasierte Berechtigungen (ACL), Drag & Drop, Thumbnails, Vorschau, ZIP-Download, geteilte Links & optionaler Virenscan (ClamAV)
- KI-Chat-Assistent (Anthropic/OpenAI/DeepSeek): Vollbild-Assistent, semantische Doku-Suche (RAG), Aktionen mit Berechtigungsprüfung, Datenschutz-Modus & Website-Bot
- API-Auto: KI-gestützte API-Integrationen zum Datenimport in vorhandene Module

</td>
</tr>
</table>

---

## Technologie-Stack

<div align="center">

[![PHP](https://img.shields.io/badge/PHP-8.2+-777BB4?style=for-the-badge&logo=php&logoColor=white)](#)
[![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white)](#)
[![MariaDB](https://img.shields.io/badge/MariaDB-003545?style=for-the-badge&logo=mariadb&logoColor=white)](#)
[![HTML5](https://img.shields.io/badge/HTML5-E34F26?style=for-the-badge&logo=html5&logoColor=white)](#)
[![CSS3](https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white)](#)
[![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)](#)

</div>

| Komponente | Technologie |
|:---|:---|
| **Backend** | PHP 8.2+ (Custom MVC Framework) |
| **Datenbank** | MySQL 5.7+ / MariaDB 10.4+ |
| **PDF-Export** | dompdf 2.x |
| **Auth** | league/oauth2-client, thenetworg/oauth2-azure |
| **JWT** | firebase/php-jwt |
| **WebAuthn** | lbuchs/webauthn |
| **Verschlüsselung** | OpenSSL (AES-256-GCM), PBKDF2, Argon2ID |
| **Frontend** | HTML5, CSS3, Vanilla JS, AdminLTE |
| **Editor** | TinyMCE (optional) / wysiwyg.js (integriert) |
| **Diagramme** | draw.io (self-hosted) |
| **API-Doku** | Swagger UI (lokal gebündelt) |
| **KI (optional)** | Anthropic / OpenAI / DeepSeek / OpenAI-kompatibel (KI-Chat); Anthropic (API-Auto) |

---

## Systemvoraussetzungen

<table>
<tr>
<td width="50%" valign="top">

### Server

| Anforderung | Version |
|:---|:---|
| Betriebssystem | Linux (Ubuntu 22.04+ / Debian 12+) |
| Webserver | Apache 2.4+ (mod_rewrite) oder Nginx |
| PHP | 8.2 oder höher |
| Datenbank | MySQL 5.7+ oder MariaDB 10.4+ |

</td>
<td width="50%" valign="top">

### PHP-Extensions

```
php8.x-fpm       php8.x-mysql
php8.x-json      php8.x-mbstring
php8.x-openssl   php8.x-pdo
php8.x-zip       php8.x-curl
php8.x-xml       php8.x-gd
```

</td>
</tr>
</table>

### Empfohlene Ressourcen

| Szenario | CPU | RAM | Disk |
|:---|:---:|:---:|:---:|
| Klein (<20 Benutzer) | 2 vCPU | 2 GB | 20 GB |
| Mittel (<100 Benutzer) | 4 vCPU | 4 GB | 50 GB |
| Gross (100+ Benutzer) | 8 vCPU | 8 GB | 100 GB |

---

## Installation

> Ausführliche Anleitung: **[docs/INSTALLATION.md](docs/INSTALLATION.md)**

```bash
# 1. Repository klonen
git clone <repository-url> /var/www/it-docs
cd /var/www/it-docs

# 2. PHP-Abhängigkeiten installieren
composer install --no-dev --optimize-autoloader

# 3. Storage-Verzeichnis anlegen (ausserhalb webroot!)
mkdir -p /var/www/it-docs-storage/{uploads,sessions,logs,cache}
chown -R www-data:www-data /var/www/it-docs-storage
chmod 750 /var/www/it-docs-storage

# 4. Webserver konfigurieren (siehe docs/INSTALLATION.md)

# 5. Installationsassistent aufrufen
#    https://your-domain.com/install.php
#    Der Assistent legt die .env samt APP_KEY selbst an - keine .env vorab
#    von Hand erstellen, sonst verweigert er den Start.

# 6. Installationsdatei entfernen (Pflicht!)
rm public/install.php
```

### Cron-Scheduler einrichten

OpenNIT verwendet einen **zentralen Scheduler** — eine einzige Crontab-Zeile genügt:

```bash
* * * * * www-data /usr/bin/php /var/www/it-docs/bin/scheduler.php >> /var/www/it-docs-storage/logs/scheduler.log 2>&1
```

Alle Tasks (Intervall, Hintergrund, aktiv/inaktiv) werden bequem im Admin-UI unter **Admin > Cron-Jobs** verwaltet.

---

## Konfiguration

<details>
<summary><strong>Umgebungsvariablen (.env)</strong></summary>

```ini
# Anwendung
APP_NAME="OpenNIT"
APP_ENV=production
APP_DEBUG=false                 # NIEMALS true in Produktion!
APP_URL=https://docs.example.com
APP_KEY=<32-Zeichen-Zufallsschlüssel>

# Datenbank
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=it_docs
DB_USERNAME=it_docs_user
DB_PASSWORD=<sicheres-passwort>
DB_CHARSET=utf8mb4

# Azure AD / Entra ID (optional)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
AZURE_REDIRECT_URI=https://docs.example.com/auth/callback

# Sicherheit
# Hinweis: Session-/CSRF-Lebensdauer, Rate-Limit, max. Upload-Größe und Audit-Aufbewahrung
# lassen sich auch im Backend unter Admin > Einstellungen > „Sicherheit & Sessions" pflegen
# (überschreibt diese .env-Werte via config/runtime.php). SESSION_SECURE/HSTS/CSP bleiben hier.
SESSION_LIFETIME=28800          # 8 Stunden
SESSION_SECURE=true             # Nur HTTPS!
CSRF_TOKEN_LIFETIME=28800
RATE_LIMIT_REQUESTS=100
RATE_LIMIT_WINDOW=60

# Datei-Storage
STORAGE_PATH=/var/www/it-docs-storage
STORAGE_ENCRYPTION_KEY=<32-Zeichen-Zufallsschlüssel>
MAX_UPLOAD_SIZE=52428800        # 50 MB

# Audit
AUDIT_RETENTION_YEARS=10
```

</details>

---

## Sicherheit

> Vollständige Analyse: **[docs/SECURITY.md](docs/SECURITY.md)**

| Bereich | Implementierung |
|:---|:---|
| Passwort-Hashing | Argon2ID (64 MB memory, time 4, threads 3) |
| Datenverschlüsselung | AES-256-GCM |
| Schlüsselableitung | PBKDF2 |
| SQL-Injection | PDO Prepared Statements (Emulation off) |
| CSRF | Token-basiert mit `hash_equals()` |
| XSS | Output-Encoding + Content Security Policy |
| Session | HttpOnly, Secure, SameSite=Lax, 30-min-Rotation |
| File Uploads | Ausserhalb webroot, UUID-Namen, MIME-Check |
| HTTP-Header | HSTS, X-Frame-Options, CSP, Referrer-Policy |
| MFA | TOTP + WebAuthn/FIDO2 |
| Audit | Immutable Hash-Chain-Log |

### Checkliste Produktion

- [ ] `APP_DEBUG=false`
- [ ] `SESSION_SECURE=true`
- [ ] `STORAGE_PATH` ausserhalb webroot
- [ ] `install.php` gelöscht
- [ ] Rate Limiting aktiv
- [ ] HTTPS mit gültigem Zertifikat
- [ ] MFA für externe Benutzer erzwungen

> Anleitung für externen Zugriff: **[docs/EXTERNAL_ACCESS.md](docs/EXTERNAL_ACCESS.md)**

---

## Audit-Funktion

> Vollständige Dokumentation: **[docs/AUDIT.md](docs/AUDIT.md)**

```
Aktion  -->  Audit-Eintrag  -->  Hash(Eintrag + vorheriger Hash)  -->  Kette
```

Jede Benutzeraktion wird erfasst:

- **Wer**: Benutzer, IP-Adresse, User-Agent
- **Was**: Aktion, betroffenes Objekt, alter/neuer Wert (JSON)
- **Wann**: Zeitstempel mit Mikrosekunden-Präzision
- **Wie kritisch**: Risikostufe (low / medium / high / critical)
- **Verifizierbar**: Kryptografischer Hash-Fingerprint in der Chain

Zugriff via **Admin > Audit-Log** — filterbar, exportierbar als CSV/PDF.

Für Audits und die jährliche Wirtschaftsprüfung erzeugt der **Audit-Bericht-Generator** unter **Admin > Audit-Bericht** ein PDF-Nachweisdokument (ISO 27001 / BSI / DSGVO / GoBD) mit Live-Kennzahlen und Control-Mapping — siehe [docs/COMPLIANCE.md](docs/COMPLIANCE.md).

---

## Benutzerrollen & Berechtigungen

Capability-basiertes RBAC-System:

| Rolle | Beschreibung |
|:---|:---|
| **Admin** | Vollzugriff auf alle Funktionen und Einstellungen |
| **Editor** | Lesen und Bearbeiten von Dokumentation |
| **Viewer** | Nur-Lese-Zugriff |
| **Benutzerdefiniert** | Beliebige Kombination von Capabilities |

<details>
<summary><strong>Capabilities (Beispiele)</strong></summary>

`manage_users` · `manage_roles` · `view_audit` · `manage_assets` · `manage_contracts` · `manage_ipam` · `view_vault` · `manage_tickets` · `manage_backup` · `view_monitoring`

</details>

---

## Module

OpenNIT ist vollständig modular aufgebaut. Jedes Modul kann einzeln unter **Admin > Einstellungen > Module** aktiviert werden.

### Kern

| | Modul | Beschreibung |
|:---:|:---|:---|
| ![Dashboard](https://img.shields.io/badge/-Dashboard-007bff?style=flat-square) | **Dashboard** | Konfigurierbare Übersichtsseite mit Widgets |
| ![Docs](https://img.shields.io/badge/-Dokumentation-007bff?style=flat-square) | **Dokumentation** | Hierarchisches Wiki mit Versionsverlauf & Review-Workflow |

### Betrieb

| | Modul | Beschreibung |
|:---:|:---|:---|
| ![Tickets](https://img.shields.io/badge/-Tickets-17a2b8?style=flat-square) | **Tickets** | Ticketsystem mit Multi-Zuweisung, Auto-Zuweisung (Round-Robin / Kategorie), IMAP-Fetch, SLA-Tracking & -Eskalation, Geschäftszeiten, Agenten-Benachrichtigungen, eigene Felder, Stoppuhr, CSAT, Linked Tickets & Merge, Sammelstörung (eine Antwort an alle angehängten Meldungen, gemeinsames Schliessen) & wiederkehrende Tickets |
| ![Services](https://img.shields.io/badge/-IT--Services-17a2b8?style=flat-square) | **IT-Services** | Dienstkatalog mit SLAs und Abhängigkeits-Tracking |
| ![Contacts](https://img.shields.io/badge/-Adressbuch-17a2b8?style=flat-square) | **Adressbuch** | Firmen- und Ansprechpartner-Datenbank |
| ![Orders](https://img.shields.io/badge/-Bestellungen-17a2b8?style=flat-square) | **Bestellungen** | Bestell-Board mit Status-KPIs, Teil-Lieferung, Weiterleiten per Mail, CSV-Export & Asset-Übernahme |
| ![Budget](https://img.shields.io/badge/-Budget-17a2b8?style=flat-square) | **Budget** | Jahresbudgets mit Positionen, Soll-Ist-Vergleich & Belegen (Vorschau, Brutto/Netto) |
| ![Contracts](https://img.shields.io/badge/-Vertr%C3%A4ge-17a2b8?style=flat-square) | **Verträge** | Vertragsverwaltung mit Kündigungsfristen, Auto-Verlängerung & vereinheitlichter Monatskosten-Anzeige |
| ![Loans](https://img.shields.io/badge/-Leihger%C3%A4te-17a2b8?style=flat-square) | **Leihgeräte** | Übergabeprotokoll mit Signatur, Leih-/Rückgabeschein (PDF) & Self-Service-Reservierung mit Freigabe |
| ![Status](https://img.shields.io/badge/-Statusseite-17a2b8?style=flat-square) | **Statusseite** | Öffentliche Statusseite (ohne Login, iframe-einbettbar) mit Dienst-Status, Störungsmeldungen samt Verlauf, geplanten Wartungen, optionalen Dienst-Gruppen & 90-Tage-Uptime; optionale Kopplung an Wartungskalender & Konfigurationslog; Besucher können sich per E-Mail über Beginn und Behebung benachrichtigen lassen (Double-Opt-in); offene Monitoring-Alarme lassen sich als Störungsmeldung übernehmen |

### Infrastruktur

| | Modul | Beschreibung |
|:---:|:---|:---|
| ![IPAM](https://img.shields.io/badge/-IPAM-28a745?style=flat-square) | **IP-Verwaltung** | Subnetz- & IP-Management mit Netzwerkscan |
| ![SSL](https://img.shields.io/badge/-SSL--Checker-28a745?style=flat-square) | **SSL-Checker** | Zertifikat-Monitoring mit Ablaufwarnung |
| ![Assets](https://img.shields.io/badge/-Inventar-28a745?style=flat-square) | **Inventar** | Asset-Management mit Garantieabfrage & Etikettendruck |
| ![Stock](https://img.shields.io/badge/-Lager-28a745?style=flat-square) | **Lager** | Hardware-Bestandsverwaltung |
| ![Monitoring](https://img.shields.io/badge/-Monitoring-28a745?style=flat-square) | **Monitoring** | Zabbix-Integration mit Ereignisanzeige |
| ![UniFi](https://img.shields.io/badge/-UniFi-28a745?style=flat-square) | **UniFi** | UniFi-Controller (Topology, Voucher, Multi-Site) |
| ![Backup](https://img.shields.io/badge/-Backup-28a745?style=flat-square) | **Backup** | Veeam & Proxmox Backup Server (PBS) Überwachung & Auto-Sync |
| ![NetDiagram](https://img.shields.io/badge/-Netzwerkpl%C3%A4ne-28a745?style=flat-square) | **Netzwerkpläne** | draw.io Diagramme mit Vorschau |
| ![DNS](https://img.shields.io/badge/-DNS--Zonen-28a745?style=flat-square) | **DNS-Zonen** | Import von Windows-DNS-Zonen & -Records per PowerShell-Agent, mit globaler Suche |

### Produktivität

| | Modul | Beschreibung |
|:---:|:---|:---|
| ![Vault](https://img.shields.io/badge/-Vault-6f42c1?style=flat-square) | **Passwörter** | AES-256-GCM Vault (persönlich + Team) |
| ![Kanban](https://img.shields.io/badge/-Kanban-6f42c1?style=flat-square) | **Kanban** | Boards für Aufgaben & Projekte |
| ![Workflows](https://img.shields.io/badge/-Antr%C3%A4ge-6f42c1?style=flat-square) | **Anträge & Genehmigungen** | Baukasten für Approval-Prozesse: Vorlagen mit Formular-Builder, mehrstufige/parallele Stationen, Genehmiger per Rolle/Abteilung/Vorgesetztem oder externem Magic-Link, Fulfillment via Tickets/Kanban, Vertretung, Fristen/Eskalation, PDF & DSGVO-Anonymisierung |
| ![ToDo](https://img.shields.io/badge/-To--Do-6f42c1?style=flat-square) | **To-Do-Liste** | Persönliche Aufgabenlisten |
| ![Files](https://img.shields.io/badge/-Dateien-6f42c1?style=flat-square) | **Datei-Explorer** | Zentraler Dateimanager mit Versionierung, Papierkorb, Ordner-ACL, geteilten Links & optionalem Virenscan |
| ![Calendar](https://img.shields.io/badge/-Kalender-6f42c1?style=flat-square) | **Wartungskalender** | Kalenderansicht für IT-Ereignisse, inkl. Serientermine |
| ![Deadlines](https://img.shields.io/badge/-Fristen--Cockpit-6f42c1?style=flat-square) | **Fristen-Cockpit** | Modulübergreifende Übersicht aller Fristen (SSL, Verträge, Lizenzen, Garantien, Leihgeräte, Wartung, ISMS, Changes) mit optionalem wöchentlichem E-Mail-Digest |

### KI & Integrationen

| | Modul | Beschreibung |
|:---:|:---|:---|
| ![AI](https://img.shields.io/badge/-KI--Chat-e83e8c?style=flat-square) | **AI-Assistent** | Vollbild-KI-Chat mit RAG-Doku-Suche, Aktionen, Datenschutz-Modus & Website-Bot (mehrere Anbieter) |
| ![API-Auto](https://img.shields.io/badge/-API--Auto-e83e8c?style=flat-square) | **API-Auto** | KI-gestützte API-Integrationen: Verbindung beschreiben, KI leitet das Mapping ab, Daten werden in vorhandene Module importiert |
| ![Hypervisor](https://img.shields.io/badge/-Hypervisor-e83e8c?style=flat-square) | **Hypervisor** | VMware vSphere / Hyper-V / Proxmox VE Übersicht |

### Administration

| | Modul | Beschreibung |
|:---:|:---|:---|
| ![Directory](https://img.shields.io/badge/-Verzeichnis-6c757d?style=flat-square) | **Personenverzeichnis** | Mitarbeiterverzeichnis (Azure AD / LDAP Sync) |
| ![ConfigLog](https://img.shields.io/badge/-ConfigLog-6c757d?style=flat-square) | **Konfigurationslog** | Protokollierung von Systemkonfigurationsänderungen; geplante Änderungen optional als Wartung auf der Statusseite (mit Dienst-Umschaltung) |
| ![Licenses](https://img.shields.io/badge/-Lizenzen-6c757d?style=flat-square) | **Lizenzmanager** | Software-Lizenzverwaltung; Microsoft-365-Abgleich (Sitze, optional auch wer welchen Platz hält); Abgleich gegen das Software-Inventar (gekaufte Plätze vs. tatsächliche Installation) |
| ![Software](https://img.shields.io/badge/-Software--Inventar-6c757d?style=flat-square) | **Software-Inventar** | Welche Programme auf welchem Gerät installiert sind — gelesen vom Inventar-Agenten und/oder dem Intune-Abgleich (beide Quellen einzeln einschaltbar, standardmässig aus). Grundlage für den Lizenz-Abgleich und für die Zuordnung von CVE-Meldungen zu betroffenen Geräten |
| ![CVE](https://img.shields.io/badge/-CVE--Tracker-6c757d?style=flat-square) | **CVE-Tracker** | Überwachung bekannter Sicherheitslücken (NVD + optional BSI CERT-Bund); mit dem Software-Inventar verbunden zeigt eine Meldung die betroffenen Geräte |
| ![XDR](https://img.shields.io/badge/-XDR-6c757d?style=flat-square) | **XDR-Warnungen** | Zentrales Board für Sicherheitswarnungen aus XDR-/EDR-Plattformen (Trend Vision One; weitere anbindbar), automatische Asset-Zuordnung, Triage & optionale Ticket-Erstellung |
| ![ISMS](https://img.shields.io/badge/-ISMS-6c757d?style=flat-square) | **Informationssicherheit** | ISMS nach ISO 27001:2022: Risikoregister (5×5), Annex-A-Controls & SoA, Maßnahmenplan, Verknüpfung zu Assets/CVE/Verträgen, Audit-Exporte (CSV/PDF) |
| ![Phone](https://img.shields.io/badge/-Telefonbuch-6c757d?style=flat-square) | **Telefonbuch** | Internes Verzeichnis mit Durchwahlen |
| ![Cron](https://img.shields.io/badge/-Cron--Jobs-6c757d?style=flat-square) | **Cron-Verwaltung** | Überwachung automatisierter Tasks |
| ![Update](https://img.shields.io/badge/-Updates-6c757d?style=flat-square) | **Update-Manager** | Integrierter Update-Mechanismus |

> **Standardmässig deaktiviert (Opt-in):** Hypervisor, UniFi, Backup, XDR-Warnungen, KI-Chat, Lizenzmanager, Software-Inventar, Konfigurationslog, Telefonbuch, DNS-Zonen, Informationssicherheit (ISMS), Statusseite sowie API-Auto — erfordern externe Systeme, sind öffentlich erreichbar bzw. nischig und werden bei Bedarf unter **Admin > Einstellungen > Module** aktiviert.

---

## Screenshots

Ein Blick in die Oberfläche – ein Screenshot pro Modul, gruppiert wie die Modul-Liste oben. Die mit externen Systemen verbundenen Module (Monitoring, UniFi, Backup, Hypervisor, Netzwerkpläne) zeigen ihren Leer-/Verbindungszustand.

<details open>
<summary><strong>Kern</strong></summary>
<br>

| Dashboard | Dokumentation |
|:---:|:---:|
| ![Dashboard](docs/screenshots/dashboard.png) | ![Dokumentation](docs/screenshots/docs.png) |
| Konfigurierbare Übersicht mit Widgets | Hierarchisches Wiki mit Themengebieten |

</details>

<details>
<summary><strong>Betrieb</strong></summary>
<br>

| Tickets | IT-Services |
|:---:|:---:|
| ![Tickets](docs/screenshots/tickets.png) | ![IT-Services](docs/screenshots/services.png) |
| Helpdesk mit SLA, Kategorien & Multi-Zuweisung | Dienstkatalog mit Erreichbarkeit |

| Adressbuch | Bestellungen |
|:---:|:---:|
| ![Adressbuch](docs/screenshots/contacts.png) | ![Bestellungen](docs/screenshots/orders.png) |
| Firmen- und Ansprechpartner-Datenbank | Bestell-Board mit Freigabeprozess |

| Verträge | Leihgeräte |
|:---:|:---:|
| ![Verträge](docs/screenshots/contracts.png) | ![Leihgeräte](docs/screenshots/loans.png) |
| Laufzeiten, Kündigungsfristen & Erinnerungen | Übergabeprotokoll & Self-Service-Verleih |

</details>

<details>
<summary><strong>Infrastruktur</strong></summary>
<br>

| IP-Verwaltung (IPAM) | SSL-Checker |
|:---:|:---:|
| ![IPAM](docs/screenshots/ipam.png) | ![SSL-Checker](docs/screenshots/ssl.png) |
| Subnetze, VLANs & Auslastung | TLS-Monitoring mit Grade & Ablaufwarnung |

| Inventar | Lager |
|:---:|:---:|
| ![Inventar](docs/screenshots/inventory.png) | ![Lager](docs/screenshots/stock.png) |
| Asset-Management mit Kategorien & Garantie | Hardware-Bestand mit Mindestmengen |

| Monitoring | Netzwerkpläne |
|:---:|:---:|
| ![Monitoring](docs/screenshots/monitoring.png) | ![Netzwerkpläne](docs/screenshots/netdiagram.png) |
| Zabbix-Integration mit Ereignisanzeige | draw.io-Diagramme (self-hosted) |

| UniFi | Backup |
|:---:|:---:|
| ![UniFi](docs/screenshots/unifi.png) | ![Backup](docs/screenshots/backup.png) |
| UniFi-Controller (Topology, Voucher) | Veeam & Proxmox Backup Server |

</details>

<details>
<summary><strong>Produktivität</strong></summary>
<br>

| Passwort-Vault | Kanban |
|:---:|:---:|
| ![Vault](docs/screenshots/vault.png) | ![Kanban](docs/screenshots/kanban.png) |
| AES-256-GCM Tresor (persönlich + Team) | Boards für Aufgaben & Projekte |

| To-Do-Liste | Datei-Explorer |
|:---:|:---:|
| ![To-Do](docs/screenshots/todos.png) | ![Dateien](docs/screenshots/files.png) |
| Persönliche Aufgaben mit Fälligkeiten | Zentraler, gesicherter Dateimanager |

| Wartungskalender | |
|:---:|:---:|
| ![Wartungskalender](docs/screenshots/maintenance.png) | |
| Termine inkl. SSL-/Vertrags-Abläufen | |

</details>

<details>
<summary><strong>KI & Integrationen</strong></summary>
<br>

| KI-Assistent | Hypervisor |
|:---:|:---:|
| ![KI-Chat](docs/screenshots/ai_chat.png) | ![Hypervisor](docs/screenshots/hypervisor.png) |
| Kontextbezogener Chat zu Doku, Assets & mehr | VMware vSphere / Hyper-V / Proxmox VE |

</details>

<details>
<summary><strong>Administration</strong></summary>
<br>

| Personenverzeichnis | Telefonbuch |
|:---:|:---:|
| ![Verzeichnis](docs/screenshots/directory.png) | ![Telefonbuch](docs/screenshots/phonebook.png) |
| Mitarbeiterverzeichnis (Azure AD / LDAP Sync) | Internes Verzeichnis mit Durchwahlen |

| Lizenzmanager | CVE-Tracker |
|:---:|:---:|
| ![Lizenzen](docs/screenshots/licenses.png) | ![CVE-Tracker](docs/screenshots/cve.png) |
| Lizenzen, Seats & Kosten im Blick | Überwachung bekannter Sicherheitslücken |

| Konfigurationslog | Budgetverwaltung |
|:---:|:---:|
| ![ConfigLog](docs/screenshots/configlog.png) | ![Budget](docs/screenshots/budget.png) |
| Protokoll von Konfigurationsänderungen | Budgets, Ausgaben & Reports |

| Cron-Verwaltung | Audit-Log |
|:---:|:---:|
| ![Cron-Jobs](docs/screenshots/cron.png) | ![Audit-Log](docs/screenshots/audit.png) |
| Überwachung automatisierter Tasks | Unveränderlicher Hash-Chain-Audit-Log |

</details>

---

## CLI-Tools

### Zentraler Scheduler (empfohlen)

```bash
# Eine einzige Crontab-Zeile — alle Tasks per Admin-UI steuerbar
* * * * * www-data /usr/bin/php /var/www/it-docs/bin/scheduler.php >> /var/www/it-docs-storage/logs/scheduler.log 2>&1
```

### Legacy-Scripts

Bleiben funktionsfähig, können aber nach Umstellung auf den Scheduler entfernt werden:

| Script | Beschreibung |
|:---|:---|
| `fetch-tickets.php` | Tickets per IMAP abrufen |
| `send-notifications.php` | E-Mail-Benachrichtigungen versenden |
| `sync-directory.php` | Azure AD / LDAP-Sync |
| `sync-backup.php` | Veeam Backup-Sync |
| `relution-sync.php` | Relution MDM-Gerätesync |
| `cve-refresh.php` | CVE-Cache aktualisieren |
| `generate-vapid-keys.php` | VAPID-Schlüssel generieren (einmalig) |
| `run-update.php` | System-Update (einmalig, manuell) |

---

## WordPress-Integration

Das Verzeichnis `wordpress-plugin/opennit-connector/` enthält ein WordPress-Plugin zur Einbindung von OpenNIT-Daten in WordPress-Seiten.

- Token-basierter API-Zugriff
- Shortcodes für Dokumentation, Assets und IT-Services
- Geeignet für Intranet-Portale auf WordPress-Basis
- Leihgeräte-Self-Service: Nutzer können Geräte reservieren bzw. anfragen (mit Freigabe durch das IT-Team)
- Website-KI-Bot: öffentlicher Chat-Bot auf der WordPress-Seite über die abgesicherte Bot-API (Token mit `assistant`-Scope, HMAC-Signatur, Nonce-Replay-Schutz, Rate-Limit)

> **Lizenz:** Das Plugin steht als eigenständiges Werk unter **GPL-2.0-or-later** (Lizenztext:
> `wordpress-plugin/opennit-connector/LICENSE`), nicht unter der AGPL-3.0 des Servers. Es
> kommuniziert ausschließlich über HTTP mit OpenNIT und bindet keinen Servercode ein; die
> abweichende Lizenz erfüllt die Vorgabe von WordPress.org („GPLv2 oder später").

Die WordPress-Endpunkte sind Teil der allgemeinen **REST-API** und von jedem System nutzbar, nicht nur von WordPress. Eine interaktive **Swagger-UI** und der OpenAPI-Export stehen im Backend unter **Admin → API** bereit.

**Authentifizierung:** Ein Bearer-Token mit passendem Scope allein genügt **nicht**. Jede Anfrage muss zusätzlich HMAC-signiert sein – über die Header `X-OpenNIT-Timestamp`, `X-OpenNIT-Nonce` und `X-OpenNIT-Signature`. Die Signatur bindet die im Aufruf angegebene Person an das Signing-Secret des Tokens; ohne sie könnte jeder Token-Inhaber im Namen beliebiger Personen lesen und handeln. Fehlen die Header, antwortet die API mit `401` – auch bei gültigem Token.

Ausgenommen sind die Endpunkte der Sync-Agenten (IPAM-Scan, DNS-Import): Sie kommen mit dem Bearer-Token aus, da die Agent-Skripte nicht signieren.

Die genaue Bildung der Signatur – kanonische Zeichenkette, Reihenfolge der Bestandteile und ein lauffähiges Beispiel – steht in der Swagger-Beschreibung unter **Admin → API** im Abschnitt „Signatur". Token und Signing-Secret werden beim Anlegen eines Tokens **einmalig** angezeigt.

---

## Weiterführende Dokumentation

| Dokument | Inhalt |
|:---|:---|
| [docs/INSTALLATION.md](docs/INSTALLATION.md) | Schritt-für-Schritt-Installation |
| [docs/SECURITY.md](docs/SECURITY.md) | Sicherheitsanalyse & Härtung |
| [docs/EXTERNAL_ACCESS.md](docs/EXTERNAL_ACCESS.md) | Konfiguration für externen Zugriff |
| [docs/m365-oauth-email.md](docs/m365-oauth-email.md) | E-Mail-Versand/-Abruf via Microsoft 365 (Graph / XOAUTH2) |
| [docs/google-oauth-email.md](docs/google-oauth-email.md) | E-Mail-Versand/-Abruf via Google Workspace (Gmail / XOAUTH2) |
| [docs/AUDIT.md](docs/AUDIT.md) | Audit-Log & Compliance-Nachweise |
| [docs/COMPLIANCE.md](docs/COMPLIANCE.md) | Control-Mapping (ISO 27001 / BSI / DSGVO / GoBD) & Audit-Bericht-Generator |
| [docs/OPEN_SOURCE_LICENSES.md](docs/OPEN_SOURCE_LICENSES.md) | Open-Source-Lizenzen |
| [STYLEGUIDE.md](STYLEGUIDE.md) | UI/UX-Designrichtlinien |

---

## Lizenz

<div align="center">

**GNU Affero General Public License v3.0 (AGPL-3.0)**

[![AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue?style=for-the-badge&logo=gnu&logoColor=white)](LICENSE)

</div>

| Erlaubt | Bedingung |
|:---|:---|
| Kostenlose Nutzung, Kopie & Weitergabe | — |
| Modifikation | Änderungen unter AGPL-3.0 veröffentlichen |
| Kommerzieller Einsatz | — |
| Private / interne Nutzung | Keine Offenlegungspflicht |
| Betrieb als Netzwerkdienst (SaaS) | Quellcode muss Nutzern zugänglich sein |

<details>
<summary><strong>Drittanbieter-Lizenzen</strong></summary>

| Lizenz | Bibliotheken |
|:---|:---|
| **MIT** | AdminLTE, TinyMCE, QRCode.js, Font Awesome Free (Code), lbuchs/webauthn, league/oauth2-client, minishlink/web-push, thenetworg/oauth2-azure, guzzlehttp/guzzle, masterminds/html5 |
| **Apache-2.0** | vis-network, ZXing Browser, Swagger UI, draw.io |
| **BSD-3-Clause** | firebase/php-jwt, vlucas/phpdotenv |
| **LGPL-2.1/3.0** | dompdf, dompdf/php-svg-lib, dompdf/php-font-lib |
| **SIL OFL 1.1** | Source Sans Pro (lokal gebündelt), Font Awesome (Schriftdateien) |
| **CC BY 4.0** | Font Awesome (Icons) |

> Externe Dienste (nur bei Konfiguration aktiv): **Anthropic-API** (KI-Chat, API-Auto), **Microsoft Graph** (M365 / Intune / Lizenzsync). Optional und separat betrieben: **ClamAV** (GPL-2.0, Virenscan im Datei-Explorer; wird nicht gebündelt).

Vollständiger Text: [LICENSE](LICENSE) · Attributionen: [NOTICE.md](NOTICE.md) · Alle Lizenzen: [licenses/](licenses/)

</details>

---

<div align="center">

**[Installation](docs/INSTALLATION.md)** · **[Sicherheit](docs/SECURITY.md)** · **[Audit](docs/AUDIT.md)** · **[Lizenz](LICENSE)**

Made with care in Germany.

</div>