Files

203 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog
Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
Dieses Projekt verwendet [Semantic Versioning](https://semver.org/lang/de/).
## [Unreleased]
---
## [0.10.0] - 2026-07-02
### Added
- Docker-Setup: `Dockerfile` (PHP 8.5 FPM + nginx + Node.js 20 + nmap + supervisor), `docker-compose.yml` (App + MariaDB 11), automatischer Startup via `entrypoint.sh` (wartet auf DB, migriert, baut Assets, startet Supervisor)
- `docker/nginx.conf`, `docker/supervisord.conf`: nginx als Reverse-Proxy zu PHP-FPM, Laravel Scheduler als Supervisor-Job
- `.dockerignore` für minimale Image-Größe
- `.env.example` auf Docker-Betrieb angepasst (DB_HOST=db, MariaDB-Variablen, APP_PORT)
- Software-Update-Funktion: Admin → Einstellungen → 🔄 Software-Update
- `config/version.php`: zentrale Versionsverwaltung, konfigurierbare Gitea-URL
- Artisan-Command `app:check-update`: prüft Gitea-API auf neuere Release-Tags, speichert Ergebnis 6 Stunden im Cache
- Artisan-Command `app:install-update`: führt `git fetch`, `git checkout <tag>`, `composer install`, `npm run build`, `php artisan migrate`, Cache-Rebuild durch — mit automatischem Wartungsmodus
- `UpdateController` (Admin): Update-Seite mit Versionsvergleich, Release-Notes, Install-Button, manueller Tag-Eingabe
- Navigation: „Update"-Badge im Einstellungen-Dropdown wenn neue Version verfügbar (liest aus Cache, kein Live-HTTP-Request)
- Update-Check alle 6 Stunden via Laravel Scheduler (`app:check-update`)
- Wartungsseite `errors/maintenance.blade.php` mit Auto-Reload
### Setup (einmalig)
```
GITEA_URL=http://<IP-des-Gitea-Servers>:3000
GITEA_REPO=admin/Network-MGMT
```
In `.env` eintragen, danach steht der Update-Check zur Verfügung.
### Docker-Deployment
```bash
git clone http://<gitea>:3000/admin/Network-MGMT.git
cd Network-MGMT
cp .env.example .env
# .env anpassen (Passwörter, APP_URL, GITEA_URL)
docker compose up -d --build
```
---
## [0.9.0] - 2026-07-02
### Added
- Geräte-Tracking ohne MAC-Adresse: nmap-Hosts aus Remote-Subnetzen (kein ARP möglich) werden jetzt als `network_devices`-Einträge erfasst (Tracking per Hostname, Fallback per IP)
- `mac_address` in `network_devices` ist jetzt nullable (mehrere NULL-Werte durch MySQL erlaubt)
- Dashboard: Separater Warnblock „⚠️ IP-Adressen-Wechsel erkannt" mit Anzeige alter IP → neuer IP, Gerätename, MAC, Quittier-Button inkl. Notizfeld
- Alle anderen Ereignisse auf dem Dashboard ebenfalls mit inline Notiz quittierbar
- Geräte-Detailseite: IP-Verlauf zeigt Hinweis wenn ein Gerät mehrere verschiedene IPs hatte, alle bekannten IPs als Tags, aktuelle IP hervorgehoben
- Globale Suche: `netbios_name` wird jetzt mitdurchsucht
- Globale Suche: Zeigt auch Treffer direkt aus `network_hosts` (Scan-Verlauf) wenn noch kein Geräteeintrag vorhanden
- Artisan-Command `network:backfill-devices`: Erstellt `network_devices`-Einträge für alle bestehenden `network_hosts` ohne `device_id`
### Setup (einmalig)
```
php artisan migrate
php artisan network:backfill-devices
```
---
## [0.8.0] - 2026-07-02
### Added
- IP-Bemerkungen: Pro IP-Adresse je Segment eine Bemerkung hinterlegen (inline editierbar in der Scan-Detailansicht)
- Neue Tabelle `network_ip_notes` (Segment + IP als Unique-Key)
- Subnetz-Erkennung: Schaltfläche „🔍 Erkennen" in Segment anlegen/bearbeiten ermittelt /24-Subnetze aus vorhandenen IP-Daten per API (`/network/detect-subnets`)
- Export Segment als Excel (`.xlsx`) via PhpSpreadsheet enthält alle Hosts des letzten Scans inkl. Bemerkungen
- Export Segment als PDF via DomPDF Querformat-Tabelle mit Hosts, Status, MAC, Hostname, Hersteller, Ping und Bemerkungen
- Export-Buttons (📊 Excel / 📄 PDF) auf Segment-Detailseite und Scan-Detailseite
### Setup (einmalig ausführen)
```
composer require phpoffice/phpspreadsheet barryvdh/laravel-dompdf
php artisan migrate
```
---
## [0.7.0] - 2026-07-02
### Added
- Automatischer Netzwerkscan via `nmap` pro Segment (Artisan Command `network:scan`)
- Scan-Zyklus pro Segment einstellbar: 5 / 15 / 30 / 60 / 360 / 720 / 1440 Minuten
- „Jetzt scannen"-Button direkt auf der Segment-Detailseite
- nmap-Parameter pro Segment konfigurierbar (z.B. `-sn`, `-sn -p 22,80,443`)
- Laravel Scheduler führt `network:scan` jede Minute aus und prüft fällige Segmente
- Auto-Refresh auf Segment-Detailseite nach manuellem Scan (prüft alle 10s)
- Chronologischer IP-Verlauf (`/network/history`) über alle Scans und Segmente
- Filter im IP-Verlauf: IP, MAC, Hostname, Segment, Status, Datumsbereich
- IP-Verlauf Auto-Refresh alle 60 Sekunden (ohne aktiven Filter)
- Navigation: neuer Menüpunkt „IP-Verlauf"
- `last_scanned_at` und `scan_interval_minutes` in Segment-Stammdaten
### Setup (Cron für Scheduler)
```
* * * * * cd /home/arudolph/Projekte/PHP/Network-MGMT && php artisan schedule:run >> /dev/null 2>&1
```
---
## [0.6.0] - 2026-07-01
### Added
- Netzwerk-Segmentverwaltung: Subnetze mit Name, VLAN-ID und Aktiv/Inaktiv-Flag definieren
- Neue Tabelle `network_segments` als organisatorische Einheit für Scan-Durchläufe
- Dashboard-Ansicht „Netzwerk" mit Übersicht aller Segmente, KPI-Karten und offenen Ereignissen
- Globale Suche über alle Segmente nach IP, MAC, Hostname und Bezeichnung
- Navigation „Netzwerk" als Dropdown: Dashboard, Segmente, Alle Geräte, Suche, Import
- Import-Seite: Segment-Auswahl beim Upload eines Angry IP Scanner Exports
- Segment-Detailseite mit Scan-Historie
- `segment_id` FK in `network_scans` Tabelle
---
## [0.5.0] - 2026-06-29
### Added
- Netzwerk-Modul: Menüpunkt „Netzwerk" auf Ebene 0 für alle eingeloggten Benutzer
- Import von Angry IP Scanner `.txt`-Exporten (tab-getrennt) via Datei-Upload
- Automatische Erkennung und Speicherung von Netzwerkgeräten anhand MAC-Adresse
- Chronologische Scan-Sessions mit Metadaten (Subnetz, Quelle, Gesamt-/Online-Hosts)
- Änderungserkennung: neue Geräte, IP-Wechsel, Online/Offline-Statuswechsel
- Ereignis-Protokoll pro Gerät mit Bestätigungs-Workflow (✓ Bestätigen)
- Geräte-Detailansicht: Stammdaten, Bezeichnung, Notizen, IP-Verlauf, Ereignislog
- Geräte-Übersicht mit Suche und Statusfilter (Online/Offline)
- Scan-Detailansicht mit vollständiger Host-Tabelle
- Manuelle Notizen zu Geräten hinzufügbar
- 4 neue Datenbanktabellen: `network_scans`, `network_devices`, `network_hosts`, `network_device_events`
- `NetworkScanImporter`-Service für Parser-Logik (MAC-Normalisierung, Spalten-Aliase)
- `NetworkController` mit 9 Routen
---
## [0.4.0] - 2026-06-29
### Added
- Einstellungen → Layout: Seitenname, Logo-Upload, Button-Farbe (Colorpicker), Dark/Light-Mode
- Settings-Tabelle als Key-Value-Store in der Datenbank
- SettingsService mit Cache-Layer (automatische Invalidierung bei Änderung)
- SettingsServiceProvider: Einstellungen werden global in alle Views injiziert
- Dark-Mode via `dark`-Klasse auf HTML-Element (Tailwind CSS)
- CSS-Variable `--color-primary` für dynamische Button-Farbe
- Hilfe-Menü auf Ebene 0 (Dropdown) für alle eingeloggten Benutzer
- Hilfe → Handbuch: Übersicht über Rollen, Funktionen, Bedienung
- Hilfe → Changelog: Changelog direkt im Browser lesbar
- Navigation: Einstellungen-Dropdown um Layout erweitert
---
## [0.3.0] - 2026-06-27
### Added
- Admin-Modul: komplette Benutzerverwaltung unter `/admin/users`
- Benutzer anlegen, bearbeiten, löschen über Web-Oberfläche
- Rollenzuweisung direkt im Formular (admin / manager / user)
- Navigationslink „Benutzerverwaltung" nur für Admins sichtbar (`@role('admin')`)
- Gefahrenzone im Bearbeiten-Formular für sicheres Löschen
- Schutz: eigener Account kann nicht gelöscht werden
### Security
- Admin-Routen mit Middleware `role:admin` geschützt
---
## [0.2.0] - 2026-06-27
### Added
- Laravel 13 Projektstruktur
- Authentifizierung via Laravel Breeze (Blade)
- RBAC via Spatie Permission v8 (admin/manager/user)
- MariaDB-Anbindung konfiguriert
- Rollen: `admin`, `manager`, `user`
- Permissions: `user.*`, `role.*`, `network.*`
- Standard-Admin-Account: admin@mms-systemservice.de
- Docker-Umgebung: Gitea, MariaDB, phpMyAdmin
---
## [0.1.0] - 2026-06-27
### Added
- Initiale Projektstruktur angelegt
- Git-Repository mit Gitea-Remote eingerichtet
- Grundlegende PHP-Projektstruktur (public/, src/, config/)
- composer.json, .gitignore, README.md
[Unreleased]: http://localhost:3000/admin/Network-MGMT/compare/v0.10.0...HEAD
[0.10.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.9.0...v0.10.0
[0.9.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.8.0...v0.9.0
[0.8.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.7.0...v0.8.0
[0.7.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.6.0...v0.7.0
[0.6.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.5.0...v0.6.0
[0.5.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.4.0...v0.5.0
[0.4.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.3.0...v0.4.0
[0.3.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.2.0...v0.3.0
[0.2.0]: http://localhost:3000/admin/Network-MGMT/compare/v0.1.0...v0.2.0
[0.1.0]: http://localhost:3000/admin/Network-MGMT/releases/tag/v0.1.0