From 124740a63c509a61351be0bb216de69111b653ad Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 30 Apr 2020 22:08:00 +0100 Subject: [PATCH 1/2] Wait for user to be verified in e2e setup Wait for our user to become verified and cross-signing to be ready before declaring that we're finsihed, otherwise we could end up prompting the user to verify again if we just wait for the verification itself to complete. Fixes part of https://github.com/vector-im/riot-web/issues/13464 --- src/stores/SetupEncryptionStore.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/stores/SetupEncryptionStore.js b/src/stores/SetupEncryptionStore.js index cbbbefb129..031c28ddb1 100644 --- a/src/stores/SetupEncryptionStore.js +++ b/src/stores/SetupEncryptionStore.js @@ -17,6 +17,7 @@ limitations under the License. import EventEmitter from 'events'; import { MatrixClientPeg } from '../MatrixClientPeg'; import { accessSecretStorage, AccessCancelledError } from '../CrossSigningManager'; +import { PHASE_DONE as VERIF_PHASE_DONE } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; export const PHASE_INTRO = 0; export const PHASE_BUSY = 1; @@ -39,6 +40,7 @@ export class SetupEncryptionStore extends EventEmitter { this.verificationRequest = null; this.backupInfo = null; MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest); + MatrixClientPeg.get().on('userTrustStatusChanged', this._onUserTrustStatusChanged); } stop() { @@ -51,6 +53,7 @@ export class SetupEncryptionStore extends EventEmitter { } if (MatrixClientPeg.get()) { MatrixClientPeg.get().removeListener("crypto.verification.request", this.onVerificationRequest); + MatrixClientPeg.get().removeListener('userTrustStatusChanged', this._onUserTrustStatusChanged); } } @@ -102,6 +105,15 @@ export class SetupEncryptionStore extends EventEmitter { } } + _onUserTrustStatusChanged = async (userId) => { + if (userId !== MatrixClientPeg.get().getUserId()) return; + const crossSigningReady = await MatrixClientPeg.get().isCrossSigningReady(); + if (crossSigningReady) { + this.phase = PHASE_DONE; + this.emit("update"); + } + } + onVerificationRequest = async (request) => { if (request.otherUserId !== MatrixClientPeg.get().getUserId()) return; @@ -119,6 +131,14 @@ export class SetupEncryptionStore extends EventEmitter { this.verificationRequest.off("change", this.onVerificationRequestChange); this.verificationRequest = null; this.emit("update"); + } else if (this.verificationRequest.phase === VERIF_PHASE_DONE) { + this.verificationRequest.off("change", this.onVerificationRequestChange); + this.verificationRequest = null; + // At this point, the verification has finished, we just need to wait for + // cross signing to be ready to use, so wait for the user trust status to + // change. + this.phase = PHASE_BUSY; + this.emit("update"); } } From d241ceea56737c1acac70ddada986eff7fb8bc98 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 30 Apr 2020 22:21:48 +0100 Subject: [PATCH 2/2] Clear more state in DeviceListener Especially the devices at start, otherwise they'll just be wrong if you log in after logging out. --- src/DeviceListener.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/DeviceListener.js b/src/DeviceListener.js index d948911d7c..d2ba8219db 100644 --- a/src/DeviceListener.js +++ b/src/DeviceListener.js @@ -78,6 +78,8 @@ export default class DeviceListener { this._dismissedThisDeviceToast = false; this._keyBackupInfo = null; this._keyBackupFetchedAt = null; + this._ourDeviceIdsAtStart = null; + this._displayingToastsForDeviceIds = new Set(); } /**