147 lines
4.5 KiB
Markdown
147 lines
4.5 KiB
Markdown
---
|
|
name: admin-message-e2ee
|
|
description: "Admin-Kommunikation fuer E2EE-Testnachrichten auf dem Bollwerk-Server. Nutze diesen Skill fuer Generaltests mit POST /api/admin/send-message per Bearer-Admin-Token (ohne Admin-Login). Trigger: 'admin message', 'send-message', 'e2ee test', 'generaltest nachrichten', 'bob alice nachrichten als admin'."
|
|
---
|
|
|
|
# Skill: Admin Message E2EE Generaltest
|
|
|
|
Dieser Skill beschreibt den sicheren Testablauf fuer den Admin-Message-Dienst auf dem Server.
|
|
|
|
Ziel:
|
|
|
|
- E2EE-Nachrichten serverseitig erzeugen und an reale User zustellen
|
|
- Endpunkt korrekt mit Bearer-Admin-Token verwenden
|
|
- Zustellung anschliessend ueber Inbox-API verifizieren
|
|
|
|
## Technischer Hintergrund
|
|
|
|
Der Endpunkt ist:
|
|
|
|
- `POST /api/admin/send-message`
|
|
- `GET /api/admin/send-message?userA=<username>&userB=<username>[&since=<epochMs>]`
|
|
- `GET /api/admin/send-message/inbox?username=<username>`
|
|
|
|
Pflichtbedingungen:
|
|
|
|
- `Authorization: Bearer <BOLLWERK_ADMIN_TOKEN>`
|
|
|
|
Wichtig:
|
|
|
|
- Kein Admin-Login erforderlich.
|
|
- Absender wird explizit per `senderUsername` uebergeben (z. B. `bob` oder `alice`).
|
|
- Empfaenger kann per `receiverUsername` (z. B. `admin`) adressiert werden.
|
|
- Dieser Endpunkt eignet sich fuer Admin-initiierte Testnachrichten im E2EE-Format.
|
|
|
|
## Vorbedingungen
|
|
|
|
1. Server erreichbar (z. B. `https://bollwerk.online`)
|
|
2. Bearer-Admin-Token (`BOLLWERK_ADMIN_TOKEN`) vorhanden
|
|
|
|
## API-Schritte
|
|
|
|
1. Health pruefen
|
|
|
|
```powershell
|
|
Invoke-WebRequest -Uri "https://bollwerk.online/api/health" -UseBasicParsing
|
|
```
|
|
|
|
2. Userliste holen (IDs fuer admin/bob/alice)
|
|
|
|
```powershell
|
|
$users = Invoke-RestMethod -Method GET -Uri "https://bollwerk.online/api/admin/users" -Headers @{ Authorization = "Bearer $env:BOLLWERK_ADMIN_TOKEN" }
|
|
```
|
|
|
|
3. E2EE-Admin-Nachricht senden
|
|
|
|
```powershell
|
|
$headers = @{
|
|
Authorization = "Bearer $env:BOLLWERK_ADMIN_TOKEN"
|
|
"Content-Type" = "application/json"
|
|
}
|
|
$payload = @{
|
|
senderUsername = "bob"
|
|
receiverUsername = "admin"
|
|
body = "Testnachricht"
|
|
sentAt = [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds()
|
|
} | ConvertTo-Json -Compress
|
|
Invoke-RestMethod -Method POST -Uri "https://bollwerk.online/api/admin/send-message" -Headers $headers -Body $payload
|
|
```
|
|
|
|
4. Inbox fuer einen User lesen (Admin-Read-Endpoint)
|
|
|
|
```powershell
|
|
Invoke-RestMethod -Method GET -Uri "https://bollwerk.online/api/admin/send-message/inbox?username=admin" -Headers @{ Authorization = "Bearer $env:BOLLWERK_ADMIN_TOKEN" }
|
|
```
|
|
|
|
## Python-Skripte
|
|
|
|
Dateien in diesem Skill-Ordner:
|
|
|
|
- `send_admin_messages.py`
|
|
- `receive_admin_messages.py`
|
|
|
|
### Senden
|
|
|
|
```powershell
|
|
# Genau eine Nachricht senden (nur 3 Parameter)
|
|
python ".github/skills/admin-message-e2ee/send_admin_messages.py" `
|
|
--sender bob `
|
|
--receiver admin `
|
|
--body "Hi admin, Bob hier"
|
|
```
|
|
|
|
### Empfangen
|
|
|
|
```powershell
|
|
# Inbox fuer genau einen User (nur 1 Parameter)
|
|
python ".github/skills/admin-message-e2ee/receive_admin_messages.py" --username admin
|
|
```
|
|
|
|
Voraussetzung für beide Skripte:
|
|
|
|
- `BOLLWERK_ADMIN_TOKEN` als ENV gesetzt.
|
|
|
|
### Generaltest-Skript
|
|
|
|
```powershell
|
|
python ".github/skills/admin-message-e2ee/generaltest_admin_message.py"
|
|
```
|
|
|
|
Dieses Skript fuehrt den Skill-Selbsttest aus:
|
|
|
|
- Nur bob/alice-Kommunikation (keine Nachrichten an admin)
|
|
- Offline/Online-Phasen:
|
|
- bob sendet waehrend alice offline ist
|
|
- alice kommt online, empfaengt, antwortet
|
|
- bob kommt online, empfaengt, antwortet
|
|
- UTF-8/Emoji-Payloads werden aktiv gesendet
|
|
- Integritaetspruefung ueber Transport-Metadaten (ID, Reihenfolge, Sender/Empfaenger, Inbox-Sichtbarkeit)
|
|
|
|
Wichtig zur Inhaltsintegritaet:
|
|
|
|
- Die Admin-Inbox liefert E2EE-Ciphertext.
|
|
- Eine Klartext-Gleichheitspruefung des Message-Bodys ist ueber diesen Endpunkt nicht moeglich.
|
|
|
|
## Erwartete Fehlerbilder
|
|
|
|
- `401 Unauthorized`: Bearer-Token fehlt
|
|
- `403 Forbidden`: Bearer-Token stimmt nicht
|
|
- `404 Sender not found`: `senderUsername` existiert nicht
|
|
- `400 Encryption failed`: Empfaenger hat keinen gueltigen E2EE Public Key
|
|
- `404 Receiver not found`: falsche `receiverId`
|
|
- `400 Query param username is required`: Inbox-Request unvollstaendig
|
|
|
|
## Generaltest-Standardfall
|
|
|
|
Wenn User explizit "1x Bob, mehrere x Alice" wuenscht:
|
|
|
|
- Sende 1 Nachricht mit `--sender bob --receiver admin`
|
|
- Sende mehrere Nachrichten mit `--sender alice --receiver admin`
|
|
- Verifiziere mit `receive_admin_messages.py --username admin`
|
|
|
|
## Security-Hinweise
|
|
|
|
- Secrets nie im Chat ausgeben
|
|
- Tokens nur maskiert loggen
|
|
- Keine Passwoerter fuer diesen Endpunkt erforderlich
|
|
- Keine automatischen Key-Mutationen in den Minimal-Skripten
|