feat(admin): DELETE /api/admin/users/{id} — Nutzer und alle Daten löschen
- Store.delete_user() löscht User + Sessions + Nachrichten + Erinnerungen + Nutzung
(atomic, anonymer Nutzer geschützt)
- DELETE /api/admin/users/{user_id} (Admin-Key erforderlich)
→ 200 {"deleted":"..."} | 404 | 400 (anonymous)
- BEDIENUNGSANLEITUNG: $URL-Erklärung am Anfang, § 7.2 vollständig mit
Anlegen/Anzeigen/Löschen-Beispielen inkl. realer Beispiel-Antworten
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5b9b9bbdcf
commit
4970bdc85a
3 changed files with 127 additions and 11 deletions
|
|
@ -6,12 +6,26 @@
|
|||
> Remote-Deployment: [deploy/README.md](deploy/README.md) ·
|
||||
> Kurzübersicht: [README.md](README.md)
|
||||
|
||||
In den Shell-Beispielen steht die Gateway-Adresse als Variable — einmal setzen,
|
||||
dann überall einsetzbar (Port aus deiner `.env`, hier `8003`):
|
||||
### Lesehilfe: `$URL` und `| jq`
|
||||
|
||||
In allen Shell-Beispielen dieses Handbuchs steht `$URL` als Platzhalter für die
|
||||
Gateway-Adresse. Einmal setzen, dann überall einsetzbar:
|
||||
|
||||
```bash
|
||||
export URL=http://localhost:8003
|
||||
```
|
||||
Befehle mit JSON-Ausgabe enden auf `| jq` (schöne Formatierung). Installieren: `sudo apt install jq`.
|
||||
|
||||
*(Port aus deiner `.env` — Standard ist `8080`, in dieser Installation `8003`.)*
|
||||
|
||||
Danach kann man z. B. schreiben:
|
||||
```bash
|
||||
curl -s $URL/health
|
||||
# entspricht: curl -s http://localhost:8003/health
|
||||
```
|
||||
|
||||
Befehle, die JSON zurückgeben, enden auf `| jq` — das formatiert die Ausgabe lesbar.
|
||||
Installieren: `sudo apt install jq`. Ohne `jq` einfach weglassen; der Befehl
|
||||
funktioniert trotzdem, die Ausgabe ist dann unformatiert.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -916,27 +930,92 @@ AUTH_ENABLED=false # Lokal/Entwicklung: anonymer Standardnutzer, kein Token n
|
|||
|
||||
Geschützte Endpunkte: `chat`, `speak`, `transcribe`, `sessions`, `me`.
|
||||
|
||||
### 7.2 Nutzer anlegen und Tokens
|
||||
### 7.2 Nutzer anlegen, anzeigen und löschen
|
||||
|
||||
**Voraussetzung:** `ADMIN_API_KEY` muss beim Gateway-Start als Umgebungsvariable gesetzt sein.
|
||||
Einmal setzen (gilt für alle folgenden Befehle im Terminal):
|
||||
|
||||
```bash
|
||||
export ADMIN_API_KEY=ein-langes-geheimnis # muss beim Gateway-Start gesetzt sein
|
||||
export ADMIN_API_KEY=mein-langes-geheimnis
|
||||
```
|
||||
|
||||
# Nutzer anlegen (Token erscheint NUR einmal — sicher aufbewahren!):
|
||||
#### Nutzer anlegen
|
||||
|
||||
```bash
|
||||
curl -s -X POST $URL/api/admin/users \
|
||||
-H "X-Admin-Key: $ADMIN_API_KEY" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"display_name":"Oma Anna"}' | jq
|
||||
# → {"user_id":"…","display_name":"Oma Anna","token":"…"}
|
||||
```
|
||||
|
||||
# Mit Token aufrufen:
|
||||
TOKEN=<token-von-oben>
|
||||
Beispiel-Antwort:
|
||||
```json
|
||||
{
|
||||
"user_id": "a3f8c1d2e4b7...",
|
||||
"display_name": "Oma Anna",
|
||||
"token": "va-tok-AbCdEfGh12345..."
|
||||
}
|
||||
```
|
||||
|
||||
> ⚠️ Das Token erscheint **nur einmal** — sofort sicher aufbewahren (z. B. in einem
|
||||
> Passwort-Manager). Es kann danach nicht mehr abgerufen werden. Bei Verlust muss
|
||||
> der Nutzer gelöscht und neu angelegt werden.
|
||||
|
||||
Das Token dem Nutzer mitteilen. Er gibt es bei jedem Aufruf im `Authorization`-Header an:
|
||||
```bash
|
||||
TOKEN=va-tok-AbCdEfGh12345... # einmal setzen
|
||||
curl -s $URL/api/me -H "Authorization: Bearer $TOKEN" | jq
|
||||
# → {"user_id":"a3f8c1d2e4b7…","display_name":"Oma Anna","prefs":{}}
|
||||
```
|
||||
|
||||
# Alle Nutzer anzeigen (Admin):
|
||||
#### Alle Nutzer anzeigen
|
||||
|
||||
```bash
|
||||
curl -s $URL/api/admin/users -H "X-Admin-Key: $ADMIN_API_KEY" | jq
|
||||
```
|
||||
|
||||
**Dauerhafte Präferenzen** pro Nutzer (Ebene zwischen Profil und Session):
|
||||
Beispiel-Antwort:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"user_id": "a3f8c1d2e4b7...",
|
||||
"display_name": "Oma Anna",
|
||||
"external_id": null,
|
||||
"created_at": "2026-06-18T10:00:00+00:00"
|
||||
},
|
||||
{
|
||||
"user_id": "b9e2f5a1c6d3...",
|
||||
"display_name": "Herr Müller",
|
||||
"external_id": null,
|
||||
"created_at": "2026-06-18T11:30:00+00:00"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
#### Nutzer löschen
|
||||
|
||||
Löscht den Nutzer **und alle seine Daten** (Sessions, Gesprächsverlauf, Erinnerungen,
|
||||
Nutzungsstatistik) unwiderruflich.
|
||||
|
||||
```bash
|
||||
USER_ID=a3f8c1d2e4b7... # user_id aus der Liste oben
|
||||
|
||||
curl -s -X DELETE $URL/api/admin/users/$USER_ID \
|
||||
-H "X-Admin-Key: $ADMIN_API_KEY" | jq
|
||||
```
|
||||
|
||||
Beispiel-Antwort bei Erfolg:
|
||||
```json
|
||||
{ "deleted": "a3f8c1d2e4b7..." }
|
||||
```
|
||||
|
||||
Nutzer nicht gefunden → HTTP 404:
|
||||
```json
|
||||
{ "detail": "Nutzer 'xyz' nicht gefunden." }
|
||||
```
|
||||
|
||||
#### Dauerhafte Nutzerpräferenzen setzen
|
||||
|
||||
```bash
|
||||
curl -s -X PUT $URL/api/me/prefs \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
|
|
@ -1436,6 +1515,7 @@ Body-Felder: `input_endpoint`, `output_endpoint`, `stt_provider`, `llm_provider`
|
|||
|---------|------|------|--------------|
|
||||
| `POST` | `/api/admin/users` | `X-Admin-Key` | Nutzer anlegen → Token einmalig |
|
||||
| `GET` | `/api/admin/users` | `X-Admin-Key` | Alle Nutzer auflisten |
|
||||
| `DELETE` | `/api/admin/users/{user_id}` | `X-Admin-Key` | Nutzer + alle Daten löschen |
|
||||
|
||||
## B.6 WebSocket
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue