fix: Geräte-Pairing - Schlüssel-Code stimmte nie mit dem angezeigten Code überein

SnapshotService.CreateAndUploadAsync lädt in zwei Schritten hoch: Schritt 1
holt einen Code vom Server, Schritt 2 verschlüsselt den Sync-Schlüssel mit
diesem Code und lädt erneut hoch. SnapshotStore.Store() vergab bei jedem
Aufruf bedingungslos einen neuen Zufallscode - der dem Nutzer am Ende
angezeigte Code war dadurch nie derselbe, mit dem der Schlüssel tatsächlich
verschlüsselt wurde. Jede Kopplung musste deterministisch an der
Schlüssel-Entschlüsselung scheitern.

SnapshotUploadRequest bekommt ein optionales Code-Feld; Store() aktualisiert
bei vorhandenem, passendem Code denselben Eintrag statt einen neuen mit
neuem Code anzulegen. Betrifft LehrerApp.Api - der Server muss neu deployt
werden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 21:34:43 +02:00
co-authored by Claude Sonnet 5
parent 26461bd2f2
commit dc21cb2319
5 changed files with 129 additions and 1 deletions
+4
View File
@@ -69,6 +69,10 @@ public class SnapshotUploadRequest
public string EncryptedPayload { get; init; } = "";
public string EncryptedSyncKey { get; init; } = "";
public DeviceType DeviceType { get; init; }
/// Gesetzt beim zweiten Upload-Schritt (Schlüssel nachreichen, siehe SnapshotService.
/// CreateAndUploadAsync) — muss dem im ersten Schritt vom Server vergebenen Code entsprechen,
/// damit derselbe Eintrag aktualisiert statt ein neuer (mit neuem Code) angelegt wird.
public string? Code { get; init; }
}
public class SnapshotUploadResponse
{