diff --git a/src/stores/SetupEncryptionStore.js b/src/stores/SetupEncryptionStore.js index 43ea6c6c1f..5427eeb88c 100644 --- a/src/stores/SetupEncryptionStore.js +++ b/src/stores/SetupEncryptionStore.js @@ -45,8 +45,17 @@ export class SetupEncryptionStore extends EventEmitter { // Descriptor of the key that the secrets we want are encrypted with this.keyInfo = null; - MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest); - MatrixClientPeg.get().on('userTrustStatusChanged', this._onUserTrustStatusChanged); + const cli = MatrixClientPeg.get(); + cli.on("crypto.verification.request", this.onVerificationRequest); + cli.on('userTrustStatusChanged', this._onUserTrustStatusChanged); + + const requestsInProgress = cli.getVerificationRequestsToDeviceInProgress(cli.getUserId()); + if (requestsInProgress.length) { + // If there are multiple, we take the most recent. Equally if the user sends another request from + // another device after this screen has been shown, we'll switch to the new one, so this + // generally doesn't support multiple requests. + this._setActiveVerificationRequest(requestsInProgress[requestsInProgress.length - 1]); + } this.fetchKeyInfo(); } @@ -137,16 +146,8 @@ export class SetupEncryptionStore extends EventEmitter { } } - onVerificationRequest = async (request) => { - if (request.otherUserId !== MatrixClientPeg.get().getUserId()) return; - - if (this.verificationRequest) { - this.verificationRequest.off("change", this.onVerificationRequestChange); - } - this.verificationRequest = request; - await request.accept(); - request.on("change", this.onVerificationRequestChange); - this.emit("update"); + onVerificationRequest = (request) => { + this._setActiveVerificationRequest(request); } onVerificationRequestChange = async () => { @@ -187,4 +188,16 @@ export class SetupEncryptionStore extends EventEmitter { // async - ask other clients for keys, if necessary MatrixClientPeg.get()._crypto.cancelAndResendAllOutgoingKeyRequests(); } + + async _setActiveVerificationRequest(request) { + if (request.otherUserId !== MatrixClientPeg.get().getUserId()) return; + + if (this.verificationRequest) { + this.verificationRequest.off("change", this.onVerificationRequestChange); + } + this.verificationRequest = request; + await request.accept(); + request.on("change", this.onVerificationRequestChange); + this.emit("update"); + } }