update admin und löschung
release-tag / release-image (push) Successful in 1m41s

This commit is contained in:
2026-05-15 09:08:50 +02:00
parent be7bd79fc7
commit 9ee6d3c919
10 changed files with 715 additions and 70 deletions
+41 -1
View File
@@ -6,6 +6,10 @@ Ein kleiner webbasierter Chat-Server mit Go, HTMX, Server-Sent Events, Datei-Per
- mehrere Chaträume
- neue Räume über das UI erstellen
- Rollen: `user`, `moderator`, `admin`
- Raumrechte getrennt für Lesen und Schreiben
- private Räume über Mitgliederlisten
- Admin-Seite für Rollen, Raumrechte und Nachrichten-Aufräumen
- lokaler Entwicklungslogin oder echter Login via Pocket ID / OpenID Connect
- signierte HttpOnly-Session-Cookies
- Nachrichten senden per HTMX POST
@@ -56,6 +60,8 @@ export OIDC_CLIENT_SECRET=<client-secret-aus-pocket-id>
export OIDC_REDIRECT_URL=http://localhost:8080/auth/callback
export OIDC_SCOPES="openid profile email"
export SESSION_SECRET=$(openssl rand -base64 32)
export CHAT_ADMINS=j.bergner.hilden@gmail.com
export ROOM_CREATE_ROLES=admin,moderator
go run ./cmd/server
```
@@ -67,6 +73,40 @@ Hinweise:
- Als Anzeigename wird bevorzugt `preferred_username` genutzt, danach `name`, `email` und zuletzt `sub`.
- Hinter einem HTTPS-Reverse-Proxy sollte `X-Forwarded-Proto: https` gesetzt werden, damit Cookies als `Secure` markiert werden.
## Berechtigungssystem
Die App kennt drei globale Rollen:
- `user`: normaler Nutzer
- `moderator`: kann standardmäßig Räume erstellen und darf member-Räume betreten
- `admin`: darf alles verwalten
Der erste bekannte Benutzer wird automatisch Admin. Zusätzlich kannst du feste Admins über `CHAT_ADMINS` setzen. Der Wert ist eine kommaseparierte Liste aus Benutzernamen, E-Mail-Adressen oder OIDC-Subjects:
```bash
export CHAT_ADMINS="jan,j.bergner.hilden@gmail.com"
```
Wer Räume erstellen darf, steuerst du über:
```bash
export ROOM_CREATE_ROLES="admin,moderator"
```
Pro Raum gibt es getrennte Regeln für Lesen und Schreiben:
- `everyone`: alle eingeloggten Benutzer
- `members`: nur eingetragene Mitglieder, Moderatoren und Admins
- `moderators`: Moderatoren und Admins
- `admins`: nur Admins
Admins finden die Verwaltung unter `/admin`. Dort können sie Benutzerrollen ändern, Raumrechte setzen und alte Nachrichten löschen.
## Alte Nachrichten aufräumen
Unter `/admin` gibt es eine Retention-Aktion. Beispiel: `90` löscht alle Nachrichten, die älter als 90 Tage sind. Die Löschung ist dauerhaft, weil die aktuelle Persistenz in `data/chat.json` direkt überschrieben wird.
## Projektstruktur
```text
@@ -85,6 +125,6 @@ Diese Version ist gut als Basis für einen privaten oder internen Chat geeignet.
- CSRF-Schutz für schreibende POST-Routen
- Rate-Limits für Login, Raum-Erstellung und Nachrichten
- SQLite oder PostgreSQL als Store
- Rollen, Moderation und Admin-Funktionen
- SQLite oder PostgreSQL als Store mit Migrationen
- vollständige ID-Token/JWKS-Prüfung mit einer OIDC-Library
- sichere Reverse-Proxy-Konfiguration mit HTTPS