From 029fa39ffd53ea2032a8aba73e5d4983e8328265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesko=20Ansch=C3=BCtz?= Date: Mon, 23 Mar 2026 21:01:47 +0100 Subject: [PATCH] Dokumentation: Security-Features und Upload-Konsolidierung (Phase 6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Packages und Module: - fileutil: Shared Upload-Logik mit Tenant-Isolation - httpapi/csrf.go: Double-Submit-Cookie CSRF-Schutz - httpapi/ratelimit.go: Rate-Limiting für /login - httpapi/uploads.go: neuteredFileSystem (kein Directory-Listing) - httpapi/manage/csrf_helpers.go: CSRF-Helpers für Templates - player/agent/internal/screenshot/screenshot.go: Periodische Screenshot-Erfassung Neue Umgebungsvariablen: - MORZ_INFOBOARD_REGISTER_SECRET: Pre-Shared-Secret für Agent-Registrierung - MORZ_INFOBOARD_SCREENSHOT_EVERY: Screenshot-Intervall im Player-Agent (Sekunden) Dokumentation aktualisiert: - server/backend/README.md: Neue Packages und Env-Variable REGISTER_SECRET - DEVELOPMENT.md: Beide neuen Env-Variablen mit Erklärungen - docs/API-ENDPOINTS.md: Screenshot-Endpoint als "In Vorbereitung" dokumentiert Co-Authored-By: Claude Sonnet 4.6 --- DEVELOPMENT.md | 3 +++ docs/API-ENDPOINTS.md | 17 +++++++++++++++++ server/backend/README.md | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 0fd555e..e3ebf6f 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -161,6 +161,7 @@ Konfigurierbar ueber: - `MORZ_INFOBOARD_STATUS_STORE_PATH` – Pfad zur JSON-Datei fuer persistenten Status-Store; leer lassen fuer reinen In-Memory-Betrieb - `MORZ_INFOBOARD_ADMIN_PASSWORD` – Passwort fuer den initialen Admin-User (leer = kein EnsureAdminUser-Lauf) - `MORZ_INFOBOARD_DEFAULT_TENANT` – Slug des Standard-Tenants, dem der Admin-User zugeordnet wird (Standard: `morz`) +- `MORZ_INFOBOARD_REGISTER_SECRET` – Pre-Shared-Secret fuer POST /api/v1/screens/register; leer = offen fuer alle - `MORZ_INFOBOARD_DEV_MODE` – wenn `true`: Session-Cookie wird ohne `Secure`-Flag gesetzt (nur fuer lokale Entwicklung) Beispiele: @@ -194,6 +195,8 @@ Optional: - `MORZ_INFOBOARD_MQTT_USERNAME` – MQTT-Benutzername - `MORZ_INFOBOARD_MQTT_PASSWORD` – MQTT-Passwort +- `MORZ_INFOBOARD_REGISTER_SECRET` – Pre-Shared-Secret fuer Selbstregistrierung; muss mit Server-Konfiguration uebereinstimmen +- `MORZ_INFOBOARD_SCREENSHOT_EVERY` – Intervall fuer periodische Screenshots in Sekunden (z.B. `300` fuer 5 Minuten; 0 oder leer = deaktiviert) - `MORZ_INFOBOARD_CONFIG=/etc/signage/config.json` – dateibasierte Konfiguration Eine Beispielkonfiguration liegt in `player/config/config.example.json`. diff --git a/docs/API-ENDPOINTS.md b/docs/API-ENDPOINTS.md index cae626b..4c7a078 100644 --- a/docs/API-ENDPOINTS.md +++ b/docs/API-ENDPOINTS.md @@ -941,8 +941,25 @@ Typische HTTP-Status: --- +## In Vorbereitung (Phase 6 / künftig) + +Die folgenden Endpoints sind derzeit vorbereitet, aber noch nicht vollständig implementiert: + +- `POST /api/v1/player/screenshot` — Upload von Player-Screenshots an den Backend-Server + - Wird vom Agent unter `player/agent/internal/screenshot/screenshot.go` mit dem Intervall `MORZ_INFOBOARD_SCREENSHOT_EVERY` aufgerufen + - Multipart-Request mit `screen_id`, `screenshot` (Datei), `mime_type` + - Benötigt Backend-Handler für Persistierung und/oder Verarbeitung + +--- + ## Änderungshistorie +- **2026-03-23 (Update):** Security-Enhancements und Upload-Konsolidierung (Doris / Doku-Review) + - CSRF-Schutz (Double-Submit-Cookie) in `internal/httpapi/csrf.go` + - Rate-Limiting für `/login` in `internal/httpapi/ratelimit.go` + - Upload-Logik konsolidiert in `internal/fileutil/fileutil.go` und `internal/httpapi/uploads.go` + - Neue Env-Variable `MORZ_INFOBOARD_REGISTER_SECRET` dokumentiert + - Screenshot-Modul im Agent vorbereitet mit `MORZ_INFOBOARD_SCREENSHOT_EVERY` - **2026-03-23 (Update):** Auth- und Tenant-Dashboard-Endpoints ergaenzt (Doris / Doku-Review) - `GET /login`, `POST /login`, `POST /logout` dokumentiert - `GET /tenant/{tenantSlug}/dashboard` dokumentiert diff --git a/server/backend/README.md b/server/backend/README.md index c2d2690..732de14 100644 --- a/server/backend/README.md +++ b/server/backend/README.md @@ -18,8 +18,13 @@ Dieses Verzeichnis enthaelt das zentrale Go-Backend fuer das Info-Board-System. - `internal/config/` — Konfiguration via Umgebungsvariablen - `internal/db/` — PostgreSQL-Anbindung und Migrations-Runner - `internal/store/` — Datenbankzugriff (TenantStore, ScreenStore, MediaStore, PlaylistStore, AuthStore) +- `internal/fileutil/` — Upload-Hilfsfunktionen (SaveUploadedFile mit Tenant-Isolation) - `internal/httpapi/` — HTTP-Routing, Middleware und Handler +- `internal/httpapi/csrf.go` — Double-Submit-Cookie CSRF-Schutz +- `internal/httpapi/ratelimit.go` — Rate-Limiting fuer /login (Brute-Force-Schutz) +- `internal/httpapi/uploads.go` — Upload-Handler konsolidiert - `internal/httpapi/manage/` — Admin-UI und Playlist-Management-UI +- `internal/httpapi/manage/csrf_helpers.go` — CSRF-Token Helpers fuer Templates - `internal/httpapi/tenant/` — Tenant-Self-Service-Dashboard - `internal/mqttnotifier/` — MQTT-Notifizierungen - `internal/reqcontext/` — Context-Keys fuer authentifizierten User @@ -102,6 +107,7 @@ Alle Werte per Umgebungsvariable: | `MORZ_INFOBOARD_ADMIN_PASSWORD` | Passwort des initialen Admin-Users (leer = kein Anlegen) | leer | | `MORZ_INFOBOARD_DEFAULT_TENANT` | Slug des Tenants, dem der Admin zugeordnet wird | `morz` | | `MORZ_INFOBOARD_DEV_MODE` | `true` = Session-Cookie ohne Secure-Flag (nur lokal) | `false` | +| `MORZ_INFOBOARD_REGISTER_SECRET` | Pre-Shared-Secret fuer POST /api/v1/screens/register | leer | | `MORZ_INFOBOARD_MQTT_BROKER` | MQTT-Broker-URL (leer = kein MQTT) | leer | | `MORZ_INFOBOARD_MQTT_USERNAME` | MQTT-Benutzername | leer | | `MORZ_INFOBOARD_MQTT_PASSWORD` | MQTT-Passwort | leer |