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 = (