diff --git a/src/components/views/right_panel/EncryptionPanel.js b/src/components/views/right_panel/EncryptionPanel.js index 2e9365fca3..89c9a26e92 100644 --- a/src/components/views/right_panel/EncryptionPanel.js +++ b/src/components/views/right_panel/EncryptionPanel.js @@ -69,6 +69,7 @@ const EncryptionPanel = ({verificationRequest, member, onClose, layout}) => { const roomId = await ensureDMExists(cli, member.userId); const verificationRequest = await cli.requestVerificationDM(member.userId, roomId); setRequest(verificationRequest); + setPhase(verificationRequest.phase); }, [member.userId]); const requested = request && (phase === PHASE_REQUESTED || phase === undefined); diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index 315035db96..1174f45640 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -25,7 +25,7 @@ import dis from '../../../dispatcher'; import Modal from '../../../Modal'; import * as sdk from '../../../index'; import { _t } from '../../../languageHandler'; -import createRoom from '../../../createRoom'; +import createRoom, {findDMForUser} from '../../../createRoom'; import DMRoomMap from '../../../utils/DMRoomMap'; import AccessibleButton from '../elements/AccessibleButton'; import SdkConfig from '../../../SdkConfig'; @@ -169,10 +169,19 @@ async function verifyDevice(userId, device) { } function verifyUser(user) { + const cli = MatrixClientPeg.get(); + const dmRoom = findDMForUser(cli, user.userId); + let existingRequest; + if (dmRoom) { + existingRequest = cli.findVerificationRequestDMInProgress(dmRoom.roomId); + } dis.dispatch({ action: "set_right_panel_phase", phase: RIGHT_PANEL_PHASES.EncryptionPanel, - refireParams: {member: user}, + refireParams: { + member: user, + verificationRequest: existingRequest, + }, }); } diff --git a/src/components/views/right_panel/VerificationPanel.js b/src/components/views/right_panel/VerificationPanel.js index 08c3935a2c..106007b98b 100644 --- a/src/components/views/right_panel/VerificationPanel.js +++ b/src/components/views/right_panel/VerificationPanel.js @@ -258,7 +258,11 @@ export default class VerificationPanel extends React.PureComponent { }; componentDidMount() { - this.props.request.on("change", this._onRequestChange); + const {request} = this.props; + request.on("change", this._onRequestChange); + if (request.verifier) { + this.setState({sasEvent: request.verifier.sasEvent}); + } this._onRequestChange(); } diff --git a/src/createRoom.js b/src/createRoom.js index c25b618dc6..d4575633b3 100644 --- a/src/createRoom.js +++ b/src/createRoom.js @@ -159,7 +159,7 @@ export default function createRoom(opts) { }); } -export async function ensureDMExists(client, userId) { +export function findDMForUser(client, userId) { const roomIds = DMRoomMap.shared().getDMRoomsForUserId(userId); const rooms = roomIds.map(id => client.getRoom(id)); const suitableDMRooms = rooms.filter(r => { @@ -169,10 +169,16 @@ export async function ensureDMExists(client, userId) { } return false; }); - let roomId; if (suitableDMRooms.length) { - const room = suitableDMRooms[0]; - roomId = room.roomId; + return suitableDMRooms[0]; + } +} + +export async function ensureDMExists(client, userId) { + const existingDMRoom = findDMForUser(client, userId); + let roomId; + if (existingDMRoom) { + roomId = existingDMRoom.roomId; } else { roomId = await createRoom({dmUserId: userId, spinner: false, andView: false}); }