diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js index 89711fcb1d..ce938bd2f8 100644 --- a/src/components/structures/auth/CompleteSecurity.js +++ b/src/components/structures/auth/CompleteSecurity.js @@ -35,7 +35,18 @@ export default class CompleteSecurity extends React.Component { this.state = { phase: PHASE_INTRO, + verificationRequest: null, }; + MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest); + } + + componentWillUnmount() { + if (this.state.verificationRequest) { + this.state.verificationRequest.off("change", this.onVerificationRequestChange); + } + if (MatrixClientPeg.get()) { + MatrixClientPeg.get().removeListener("crypto.verification.request", this.onVerificationRequest); + } } onStartClick = async () => { @@ -55,6 +66,27 @@ export default class CompleteSecurity extends React.Component { } } + onVerificationRequest = (request) => { + if (request.otherUserId !== MatrixClientPeg.get().getUserId()) return; + + if (this.state.verificationRequest) { + this.state.verificationRequest.off("change", this.onVerificationRequestChange); + } + request.on("change", this.onVerificationRequestChange); + this.setState({ + verificationRequest: request, + }); + } + + onVerificationRequestChange = () => { + if (this.state.verificationRequest.cancelled) { + this.state.verificationRequest.off("change", this.onVerificationRequestChange); + this.setState({ + verificationRequest: null, + }); + } + } + onSkipClick = () => { this.setState({ phase: PHASE_CONFIRM_SKIP, @@ -87,7 +119,13 @@ export default class CompleteSecurity extends React.Component { let icon; let title; let body; - if (phase === PHASE_INTRO) { + + if (this.state.verificationRequest) { + const IncomingSasDialog = sdk.getComponent("views.dialogs.IncomingSasDialog"); + body = ; + } else if (phase === PHASE_INTRO) { icon = ; title = _t("Complete security"); body = (