4.5 KiB
4.5 KiB
| name | description |
|---|---|
| admin-message-e2ee | 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-messageGET /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
senderUsernameuebergeben (z. B.boboderalice). - Empfaenger kann per
receiverUsername(z. B.admin) adressiert werden. - Dieser Endpunkt eignet sich fuer Admin-initiierte Testnachrichten im E2EE-Format.
Vorbedingungen
- Server erreichbar (z. B.
https://bollwerk.online) - Bearer-Admin-Token (
BOLLWERK_ADMIN_TOKEN) vorhanden
API-Schritte
- Health pruefen
Invoke-WebRequest -Uri "https://bollwerk.online/api/health" -UseBasicParsing
- Userliste holen (IDs fuer admin/bob/alice)
$users = Invoke-RestMethod -Method GET -Uri "https://bollwerk.online/api/admin/users" -Headers @{ Authorization = "Bearer $env:BOLLWERK_ADMIN_TOKEN" }
- E2EE-Admin-Nachricht senden
$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
- Inbox fuer einen User lesen (Admin-Read-Endpoint)
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.pyreceive_admin_messages.py
Senden
# 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
# 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_TOKENals ENV gesetzt.
Generaltest-Skript
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 fehlt403 Forbidden: Bearer-Token stimmt nicht404 Sender not found:senderUsernameexistiert nicht400 Encryption failed: Empfaenger hat keinen gueltigen E2EE Public Key404 Receiver not found: falschereceiverId400 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