bollwerk/.github/skills/admin-message-e2ee/SKILL.md

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-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
Invoke-WebRequest -Uri "https://bollwerk.online/api/health" -UseBasicParsing
  1. 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" }
  1. 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
  1. 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.py
  • receive_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_TOKEN als 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 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