diff --git a/src/components/views/dialogs/QuestionDialog.js b/src/components/views/dialogs/QuestionDialog.js index b165bf79e2..3eec497b44 100644 --- a/src/components/views/dialogs/QuestionDialog.js +++ b/src/components/views/dialogs/QuestionDialog.js @@ -31,6 +31,7 @@ export default createReactClass({ danger: PropTypes.bool, focus: PropTypes.bool, onFinished: PropTypes.func.isRequired, + headerImage: PropTypes.string, }, getDefaultProps: function() { @@ -63,6 +64,7 @@ export default createReactClass({
diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index cd8952fd72..9db8de1ae3 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -42,6 +42,8 @@ import {textualPowerLevel} from '../../../Roles'; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; import EncryptionPanel from "./EncryptionPanel"; +import {verificationMethods} from 'matrix-js-sdk/src/crypto'; +import {SCAN_QR_CODE_METHOD, SHOW_QR_CODE_METHOD} from "matrix-js-sdk/src/crypto/verification/QRCode"; const _disambiguateDevices = (devices) => { const names = Object.create(null); @@ -135,12 +137,43 @@ function useIsEncrypted(cli, room) { return isEncrypted; } -function verifyDevice(userId, device) { - const DeviceVerifyDialog = sdk.getComponent('views.dialogs.DeviceVerifyDialog'); - Modal.createTrackedDialog('Device Verify Dialog', '', DeviceVerifyDialog, { - userId: userId, - device: device, - }, null, /* priority = */ false, /* static = */ true); +async function verifyDevice(userId, device) { + const cli = MatrixClientPeg.get(); + const member = cli.getUser(userId); + const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); + Modal.createTrackedDialog("Verification warning", "unverified session", QuestionDialog, { + headerImage: require("../../../../res/img/e2e/warning.svg"), + title: _t("Not Trusted"), + description:
+

{_t("%(name)s (%(userId)s) signed in to a new session without verifying it:", {name: member.displayName, userId})}

+

{device.getDisplayName()} ({device.deviceId})

+

{_t("Ask this user to verify their session, or manually verify it below.")}

+
, + onFinished: async (doneClicked) => { + const manuallyVerifyClicked = !doneClicked; + if (!manuallyVerifyClicked) { + return; + } + const cli = MatrixClientPeg.get(); + const verificationRequest = await cli.requestVerification( + userId, + [ + verificationMethods.SAS, + SHOW_QR_CODE_METHOD, + SCAN_QR_CODE_METHOD, + verificationMethods.RECIPROCATE_QR_CODE, + ], + [device.deviceId], + ); + dis.dispatch({ + action: "set_right_panel_phase", + phase: RIGHT_PANEL_PHASES.EncryptionPanel, + refireParams: {member, verificationRequest}, + }); + }, + primaryButton: _t("Done"), + cancelButton: _t("Manually Verify"), + }); } function verifyUser(user) { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e94420d097..5b28a58878 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1173,6 +1173,11 @@ "Yours, or the other users’ session": "Yours, or the other users’ session", "Members": "Members", "Files": "Files", + "Not Trusted": "Not Trusted", + "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) signed in to a new session without verifying it:", + "Ask this user to verify their session, or manually verify it below.": "Ask this user to verify their session, or manually verify it below.", + "Done": "Done", + "Manually Verify": "Manually Verify", "Trusted": "Trusted", "Not trusted": "Not trusted", "%(count)s verified sessions|other": "%(count)s verified sessions", @@ -1938,7 +1943,6 @@ "Session verified": "Session verified", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.", "Your new session is now verified. Other users will see it as trusted.": "Your new session is now verified. Other users will see it as trusted.", - "Done": "Done", "Without completing security on this session, it won’t have access to encrypted messages.": "Without completing security on this session, it won’t have access to encrypted messages.", "Go Back": "Go Back", "Failed to send email": "Failed to send email",