Passwort-Modus für ein gewöhnliches Konto und der ganze Eingang in sync (site-cpd #844) #2

Merged
andi merged 2 commits from any-homeserver into main 2026-10-23 13:58:25 +00:00
Collaborator

Für site-cpd #844 Bot ohne Application Service (Branch demo-matrix-sync dort).

Was sich ändert

  • Passwort-Modus: MATRIX_E2EE_PASSWORD statt MATRIX_E2EE_AS_TOKEN (genau eins von beiden). login meldet das Gerät mit m.login.password an, legt das Token in der neuen Tabelle matrix_e2ee_device ab und druckt es (access_token, in Appservice-Modus null); die UIA-Rückfragen beim Hochladen der Cross-Signing-Schlüssel (mautrix-go-Callback) und beim Löschen anderer Geräte (eigene Zwei-Schritt-Anfrage, weil DeleteDevice die Challenge nicht liest) beantwortet es mit dem Passwort. Server mit ablaufenden Tokens werden beim login mit Exit 1 abgelehnt. M_UNKNOWN_TOKEN ist im Passwort-Modus Exit 5 (Gerät abgemeldet oder gelöscht, neuer login hilft), im Appservice-Modus wie bisher Exit 1. --msc4190 nur mit Appservice.
  • sync als ganzer Eingang: timeline_plain (alle nicht verschlüsselten Timeline-Ereignisse beigetretener und verlassener Räume, mit state_key), invites (aus dem Stripped State: Raum, Einlader, encrypted), timeline_undecrypted jetzt eine Liste mit dem Umschlag für ein späteres decrypt (vorher nur eine Zahl), origin_server_ts auf jedem entschlüsselten und Klartext-Ereignis, set_presence=offline.
  • PHP: Connection(…, asToken: NULL, …, password: $pw), isPasswordMode(), LoginResult::$accessToken, SyncResult::$plain/$invites/$undecrypted (UndecryptedEvent::eventJson()), DecryptResult::$originServerTs, Stdout::plain()/invite()/undecrypted(), FakeBinary::expectNext().

Tests

Go: TestPasswordLogin (Login, UIA-Antworten, Token im Store, Folgeaufrufe mit Bearer-Token ohne Masquerading), falsches Passwort, Store ohne Token, unbekanntes Token, TestSyncPlainEventsInvitesAndUndecrypted; der Test-Homeserver kann jetzt login, devices, device_signing/upload, account_data, UIA. PHP: Passwort-Modus über Env, Secret-Leaks, genau ein Credential, neue Sync-Felder, expectNext. Binary neu gebaut, ./build.sh --check grün.

Offen

Passwort-Modus nur gegen den Test-Homeserver geprüft; Synapse und Continuwuity mit echter UIA stehen im Handtest von site-cpd aus. timeline_undecrypted wechselt den Typ (Zahl → Liste): chat2note muss beim Umstieg mitziehen.

🤖 Generated with Claude Code

**Für site-cpd #844 Bot ohne Application Service** (Branch `demo-matrix-sync` dort). ## Was sich ändert - **Passwort-Modus:** `MATRIX_E2EE_PASSWORD` statt `MATRIX_E2EE_AS_TOKEN` (genau eins von beiden). `login` meldet das Gerät mit `m.login.password` an, legt das Token in der neuen Tabelle `matrix_e2ee_device` ab und druckt es (`access_token`, in Appservice-Modus `null`); die UIA-Rückfragen beim Hochladen der Cross-Signing-Schlüssel (mautrix-go-Callback) und beim Löschen anderer Geräte (eigene Zwei-Schritt-Anfrage, weil `DeleteDevice` die Challenge nicht liest) beantwortet es mit dem Passwort. Server mit ablaufenden Tokens werden beim `login` mit Exit 1 abgelehnt. `M_UNKNOWN_TOKEN` ist im Passwort-Modus Exit 5 (Gerät abgemeldet oder gelöscht, neuer `login` hilft), im Appservice-Modus wie bisher Exit 1. `--msc4190` nur mit Appservice. - **`sync` als ganzer Eingang:** `timeline_plain` (alle nicht verschlüsselten Timeline-Ereignisse beigetretener und verlassener Räume, mit `state_key`), `invites` (aus dem Stripped State: Raum, Einlader, `encrypted`), `timeline_undecrypted` jetzt eine Liste mit dem Umschlag für ein späteres `decrypt` (vorher nur eine Zahl), `origin_server_ts` auf jedem entschlüsselten und Klartext-Ereignis, `set_presence=offline`. - **PHP:** `Connection(…, asToken: NULL, …, password: $pw)`, `isPasswordMode()`, `LoginResult::$accessToken`, `SyncResult::$plain`/`$invites`/`$undecrypted` (`UndecryptedEvent::eventJson()`), `DecryptResult::$originServerTs`, `Stdout::plain()/invite()/undecrypted()`, `FakeBinary::expectNext()`. ## Tests Go: `TestPasswordLogin` (Login, UIA-Antworten, Token im Store, Folgeaufrufe mit Bearer-Token ohne Masquerading), falsches Passwort, Store ohne Token, unbekanntes Token, `TestSyncPlainEventsInvitesAndUndecrypted`; der Test-Homeserver kann jetzt `login`, `devices`, `device_signing/upload`, `account_data`, UIA. PHP: Passwort-Modus über Env, Secret-Leaks, genau ein Credential, neue Sync-Felder, `expectNext`. Binary neu gebaut, `./build.sh --check` grün. ## Offen Passwort-Modus nur gegen den Test-Homeserver geprüft; Synapse und Continuwuity mit echter UIA stehen im Handtest von site-cpd aus. `timeline_undecrypted` wechselt den Typ (Zahl → Liste): chat2note muss beim Umstieg mitziehen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
MATRIX_E2EE_PASSWORD instead of the as_token: `login` logs the device in with
m.login.password, keeps the device's token in the store (table
matrix_e2ee_device) and prints it, answers the homeserver's user-interactive
challenges (cross-signing upload, deleting other devices) with the password;
M_UNKNOWN_TOKEN is exit 5 in this mode. `sync` now carries everything a
consumer without appservice pushes needs: plain timeline events of joined and
left rooms, the pending invitations from the stripped state, the undecrypted
events with their envelope for a later `decrypt`, origin_server_ts on every
event, and it syncs with set_presence=offline. PHP side, test helpers and
README follow. For site-cpd, branch demo-matrix-sync (#844 Bot ohne
Application Service).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
For a consumer's test helper that runs the code under test and knows the
calls its own run makes first (the intake's sync), after the test scripted
the ones that follow (the answer).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
andi merged commit 31d4e240b8 into main 2026-10-23 13:58:25 +00:00
andi deleted branch any-homeserver 2026-10-23 13:58:25 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Packages/matrix-e2ee-bin!2
No description provided.