Server F checks the dashboard's entry ticket as itsdangerous does (tools/ticket-oracle: tickets made by itsdangerous 2.2.0 itself), redeems it at /__auth for a session cookie (only the key's SHA-256 is kept) and decides at /sync by the session's grant: none, read or write; a frozen project is read by everyone; every refusal names its reason (one list in packages/protocol/src/sync.ts). A WebSocket from a page of another origin is refused. /svc/* with the service key makes, deletes, freezes and thaws projects, ends a person's grant or all their sessions (connections let go) and lists the sessions. Snapshots, restoring and copying move to F6 (they need the canonical doc.json and an epoch). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
1019 B
Markdown
23 lines
1019 B
Markdown
# Orakel für die Eintrittskarte
|
|
|
|
Das Dashboard signiert die Eintrittskarte für Server F mit itsdangerous
|
|
(`URLSafeTimedSerializer`, Salz `mdg-filius-ticket`, 60 s), Server F prüft
|
|
sie in Node (`packages/server/src/ticket.ts`). Dieses Orakel lässt
|
|
itsdangerous selbst Karten ausstellen — bei fester Uhr — und hält fest, was
|
|
es beim Lesen zu einem Zeitpunkt antwortet: die Nutzlast, abgelaufen oder
|
|
falsch signiert.
|
|
|
|
```bash
|
|
./run.sh # schreibt packages/server/test/tickets.python.json
|
|
```
|
|
|
|
Braucht Python 3; itsdangerous kommt in der Version des Dashboards
|
|
(`backend/requirements.txt`) in ein eigenes `.venv`.
|
|
|
|
Fälle: gewöhnliche Karte (schon sie ist zlib-gepackt), Lesestufe, Umlaute
|
|
und Emoji, lange Namen, genau 60 s alt, 61 s alt, aus der Zukunft, fremdes
|
|
Geheimnis, Scratchs Salz, eine veränderte Nutzlast, ohne Signatur,
|
|
Unsinn, leer, eine Liste statt eines Objekts (ungepackt), Karten ohne
|
|
Stufe, mit unbekannter Stufe, mit einem Projekt, das keine UUID ist, ohne
|
|
Namen, nur mit den Pflichtfeldern.
|