fix: personenbezogene Daten aus Companion-Klartextkanal ausschließen

- PlainEventStore.Allowed: Grade/ExamResult entfernt (beide tragen
  StudentId + Notenwert/-kommentar, PlainSyncEvent.Payload läuft aber
  als Klartext-JSON über den Server, anders als der AES-256-GCM-
  verschlüsselte Desktop-Kanal). Nur noch WorkTask/Lesson erlaubt.
- Regressionstest PlainEventStoreTests ergänzt.
- TODO.md 10.3.3 abgehakt, inkl. deutlichem Warnhinweis: die geplante
  Mitarbeitsnoten-Erfassung per Companion-App ist damit bewusst
  blockiert, bis 10.3.1 (Schlüsselaustausch) + eine echte Payload-
  Verschlüsselung für PlainSyncEvent existieren.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 23:27:08 +02:00
co-authored by Claude Sonnet 5
parent e679be7e9d
commit 858499e8ec
3 changed files with 77 additions and 4 deletions
+4 -2
View File
@@ -4,8 +4,10 @@ namespace LehrerApp.Api;
public class PlainEventStore(EventStore eventStore)
{
private static readonly HashSet<string> Allowed =
["Grade", "ExamResult", "WorkTask", "Lesson"];
// Grade/ExamResult bewusst NICHT erlaubt: PlainSyncEvent.Payload ist Klartext-JSON (siehe
// SyncModels.cs), beide Typen tragen aber eine StudentId plus Notenwert/-kommentar -
// personenbezogene Daten dürfen laut TODO.md 10.3.3 nicht unverschlüsselt übertragen werden.
private static readonly HashSet<string> Allowed = ["WorkTask", "Lesson"];
public PlainPushResponse Push(string userId, List<PlainSyncEvent> events)
{