add feature flag and send verification using DM from dialog if enabled
This commit is contained in:
parent
9c4470e599
commit
5c9e80a0ba
3 changed files with 58 additions and 8 deletions
|
@ -24,6 +24,10 @@ import sdk from '../../../index';
|
||||||
import * as FormattingUtils from '../../../utils/FormattingUtils';
|
import * as FormattingUtils from '../../../utils/FormattingUtils';
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t } from '../../../languageHandler';
|
||||||
import {verificationMethods} from 'matrix-js-sdk/lib/crypto';
|
import {verificationMethods} from 'matrix-js-sdk/lib/crypto';
|
||||||
|
import DMRoomMap from '../../../utils/DMRoomMap';
|
||||||
|
import createRoom from "../../../createRoom";
|
||||||
|
import dis from "../../../dispatcher";
|
||||||
|
import SettingsStore from '../../../settings/SettingsStore';
|
||||||
|
|
||||||
const MODE_LEGACY = 'legacy';
|
const MODE_LEGACY = 'legacy';
|
||||||
const MODE_SAS = 'sas';
|
const MODE_SAS = 'sas';
|
||||||
|
@ -86,25 +90,37 @@ export default class DeviceVerifyDialog extends React.Component {
|
||||||
this.props.onFinished(confirm);
|
this.props.onFinished(confirm);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onSasRequestClick = () => {
|
_onSasRequestClick = async () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: PHASE_WAIT_FOR_PARTNER_TO_ACCEPT,
|
phase: PHASE_WAIT_FOR_PARTNER_TO_ACCEPT,
|
||||||
});
|
});
|
||||||
this._verifier = MatrixClientPeg.get().beginKeyVerification(
|
const client = MatrixClientPeg.get();
|
||||||
verificationMethods.SAS, this.props.userId, this.props.device.deviceId,
|
const verifyingOwnDevice = this.props.userId === client.getUserId();
|
||||||
);
|
try {
|
||||||
this._verifier.on('show_sas', this._onVerifierShowSas);
|
if (!verifyingOwnDevice && SettingsStore.getValue("feature_dm_verification")) {
|
||||||
this._verifier.verify().then(() => {
|
const roomId = await ensureDMExistsAndOpen(this.props.userId);
|
||||||
|
// throws upon cancellation before having started
|
||||||
|
this._verifier = await client.requestVerificationDM(
|
||||||
|
this.props.userId, roomId, [verificationMethods.SAS],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this._verifier = client.beginKeyVerification(
|
||||||
|
verificationMethods.SAS, this.props.userId, this.props.device.deviceId,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this._verifier.on('show_sas', this._onVerifierShowSas);
|
||||||
|
// throws upon cancellation
|
||||||
|
await this._verifier.verify();
|
||||||
this.setState({phase: PHASE_VERIFIED});
|
this.setState({phase: PHASE_VERIFIED});
|
||||||
this._verifier.removeListener('show_sas', this._onVerifierShowSas);
|
this._verifier.removeListener('show_sas', this._onVerifierShowSas);
|
||||||
this._verifier = null;
|
this._verifier = null;
|
||||||
}).catch((e) => {
|
} catch (e) {
|
||||||
console.log("Verification failed", e);
|
console.log("Verification failed", e);
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: PHASE_CANCELLED,
|
phase: PHASE_CANCELLED,
|
||||||
});
|
});
|
||||||
this._verifier = null;
|
this._verifier = null;
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onSasMatchesClick = () => {
|
_onSasMatchesClick = () => {
|
||||||
|
@ -299,3 +315,30 @@ export default class DeviceVerifyDialog extends React.Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function ensureDMExistsAndOpen(userId) {
|
||||||
|
const client = MatrixClientPeg.get();
|
||||||
|
const roomIds = DMRoomMap.shared().getDMRoomsForUserId(userId);
|
||||||
|
const rooms = roomIds.map(id => client.getRoom(id));
|
||||||
|
const suitableDMRooms = rooms.filter(r => {
|
||||||
|
if (r && r.getMyMembership() === "join") {
|
||||||
|
const member = r.getMember(userId);
|
||||||
|
return member && (member.membership === "invite" || member.membership === "join");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
let roomId;
|
||||||
|
if (suitableDMRooms.length) {
|
||||||
|
const room = suitableDMRooms[0];
|
||||||
|
roomId = room.roomId;
|
||||||
|
} else {
|
||||||
|
roomId = await createRoom({dmUserId: userId, spinner: false, andView: false});
|
||||||
|
}
|
||||||
|
// don't use andView and spinner in createRoom, together, they cause this dialog to close and reopen,
|
||||||
|
// we causes us to loose the verifier and restart, and we end up having two verification requests
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'view_room',
|
||||||
|
room_id: roomId,
|
||||||
|
should_peek: false,
|
||||||
|
});
|
||||||
|
return roomId;
|
||||||
|
}
|
||||||
|
|
|
@ -339,6 +339,7 @@
|
||||||
"Render simple counters in room header": "Render simple counters in room header",
|
"Render simple counters in room header": "Render simple counters in room header",
|
||||||
"Multiple integration managers": "Multiple integration managers",
|
"Multiple integration managers": "Multiple integration managers",
|
||||||
"Use the new, consistent UserInfo panel for Room Members and Group Members": "Use the new, consistent UserInfo panel for Room Members and Group Members",
|
"Use the new, consistent UserInfo panel for Room Members and Group Members": "Use the new, consistent UserInfo panel for Room Members and Group Members",
|
||||||
|
"Send verification requests in direct message": "Send verification requests in direct message",
|
||||||
"Use the new, faster, composer for writing messages": "Use the new, faster, composer for writing messages",
|
"Use the new, faster, composer for writing messages": "Use the new, faster, composer for writing messages",
|
||||||
"Enable Emoji suggestions while typing": "Enable Emoji suggestions while typing",
|
"Enable Emoji suggestions while typing": "Enable Emoji suggestions while typing",
|
||||||
"Use compact timeline layout": "Use compact timeline layout",
|
"Use compact timeline layout": "Use compact timeline layout",
|
||||||
|
|
|
@ -126,6 +126,12 @@ export const SETTINGS = {
|
||||||
supportedLevels: LEVELS_FEATURE,
|
supportedLevels: LEVELS_FEATURE,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
"feature_dm_verification": {
|
||||||
|
isFeature: true,
|
||||||
|
displayName: _td("Send verification requests in direct message"),
|
||||||
|
supportedLevels: LEVELS_FEATURE,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
"useCiderComposer": {
|
"useCiderComposer": {
|
||||||
displayName: _td("Use the new, faster, composer for writing messages"),
|
displayName: _td("Use the new, faster, composer for writing messages"),
|
||||||
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
||||||
|
|
Loading…
Reference in a new issue