Merge pull request #4537 from matrix-org/dbkr/wait_for_user_verified
Wait for user to be verified in e2e setuppull/21833/head
						commit
						bff2130b2d
					
				| 
						 | 
				
			
			@ -78,6 +78,8 @@ export default class DeviceListener {
 | 
			
		|||
        this._dismissedThisDeviceToast = false;
 | 
			
		||||
        this._keyBackupInfo = null;
 | 
			
		||||
        this._keyBackupFetchedAt = null;
 | 
			
		||||
        this._ourDeviceIdsAtStart = null;
 | 
			
		||||
        this._displayingToastsForDeviceIds = new Set();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue