From 0757faef6d5a86bd79d656870c487ab1fe8e1790 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Mon, 23 Dec 2024 14:58:07 +0100 Subject: [PATCH 01/13] Make the encryption card more configurable: - Change the icon - Can set the destructive props --- .../settings/encryption/ChangeRecoveryKey.tsx | 8 ++++++- .../settings/encryption/EncryptionCard.tsx | 21 +++++++++++++------ .../encryption/EncryptionCard-test.tsx | 3 ++- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/components/views/settings/encryption/ChangeRecoveryKey.tsx b/src/components/views/settings/encryption/ChangeRecoveryKey.tsx index 7e02d7debde..0c2c9485f21 100644 --- a/src/components/views/settings/encryption/ChangeRecoveryKey.tsx +++ b/src/components/views/settings/encryption/ChangeRecoveryKey.tsx @@ -18,6 +18,7 @@ import { TextControl, } from "@vector-im/compound-web"; import CopyIcon from "@vector-im/compound-design-tokens/assets/web/icons/copy"; +import KeyIcon from "@vector-im/compound-design-tokens/assets/web/icons/key-solid"; import { logger } from "matrix-js-sdk/src/logger"; import { _t } from "../../../../languageHandler"; @@ -157,7 +158,12 @@ export function ChangeRecoveryKey({ pages={pages} onPageClick={onCancelClick} /> - + {content} diff --git a/src/components/views/settings/encryption/EncryptionCard.tsx b/src/components/views/settings/encryption/EncryptionCard.tsx index 8a10802cc3e..6f9ddd651a6 100644 --- a/src/components/views/settings/encryption/EncryptionCard.tsx +++ b/src/components/views/settings/encryption/EncryptionCard.tsx @@ -5,9 +5,8 @@ * Please see LICENSE files in the repository root for full details. */ -import React, { JSX, PropsWithChildren } from "react"; +import React, { JSX, PropsWithChildren, ComponentType, SVGAttributes } from "react"; import { BigIcon, Heading } from "@vector-im/compound-web"; -import KeyIcon from "@vector-im/compound-design-tokens/assets/web/icons/key-solid"; import classNames from "classnames"; interface EncryptionCardProps { @@ -22,7 +21,15 @@ interface EncryptionCardProps { /** * The description of the card. */ - description: string; + description?: string; + /** + * Whether this icon shows a destructive action. + */ + destructive?: boolean; + /** + * The icon to display. + */ + Icon: ComponentType>; } /** @@ -32,18 +39,20 @@ export function EncryptionCard({ title, description, className, + destructive = false, + Icon, children, }: PropsWithChildren): JSX.Element { return (
- - + + {title} - {description} + {description && {description}}
{children}
diff --git a/test/unit-tests/components/views/settings/encryption/EncryptionCard-test.tsx b/test/unit-tests/components/views/settings/encryption/EncryptionCard-test.tsx index d51fcb840bf..e6d9618a433 100644 --- a/test/unit-tests/components/views/settings/encryption/EncryptionCard-test.tsx +++ b/test/unit-tests/components/views/settings/encryption/EncryptionCard-test.tsx @@ -7,13 +7,14 @@ import React from "react"; import { render } from "jest-matrix-react"; +import KeyIcon from "@vector-im/compound-design-tokens/assets/web/icons/key-solid"; import { EncryptionCard } from "../../../../../../src/components/views/settings/encryption/EncryptionCard"; describe("", () => { it("should render", () => { const { asFragment } = render( - + Encryption card children , ); From 11db427649f7da28058e916abd4d8e24c84d21e7 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Mon, 23 Dec 2024 14:59:18 +0100 Subject: [PATCH 02/13] Update compound --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d79de6e081a..a188ab4adbe 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "@types/png-chunks-extract": "^1.0.2", "@types/react-virtualized": "^9.21.30", "@vector-im/compound-design-tokens": "^2.1.0", - "@vector-im/compound-web": "^7.5.0", + "@vector-im/compound-web": "^7.6.1", "@vector-im/matrix-wysiwyg": "2.38.0", "@zxcvbn-ts/core": "^3.0.4", "@zxcvbn-ts/language-common": "^3.0.4", diff --git a/yarn.lock b/yarn.lock index cbe07be2a19..f9d2a86b7e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3513,10 +3513,10 @@ resolved "https://registry.yarnpkg.com/@vector-im/compound-design-tokens/-/compound-design-tokens-2.1.3.tgz#8205ffb455a09d71a02d838f3dbb8503c4e6ec27" integrity sha512-U4UF7MVguENf0lQnkU2a9p/3llTsLXzbzmFFOxi0h6ny2igNxZj/kROP/jXTxxV9xD4TNn3z098Bos4J/qJpBA== -"@vector-im/compound-web@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-7.5.0.tgz#1547af5f0ee27b94f79ab11eee006059f3d09707" - integrity sha512-Xhef8H5WrRmPuanzRBs8rnl+hwbcQnC7nKSCupUczAQ5hjlieBx4vcQYQ/nMkrs4rMGjgfFtR3E18wT5LlML/A== +"@vector-im/compound-web@^7.6.1": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-7.6.1.tgz#c41fc8b2e4c5938041e1f0ff9792f8fbadd9ab87" + integrity sha512-LdHGFslkyky2aNPZwIOY9GgWn1VOUa2EBKHln8HBvpxnYPcs3/A2nb1+6SsJ7+Y0TzKc2HA0rZ3qPDhQ3hjZYQ== dependencies: "@floating-ui/react" "^0.27.0" "@radix-ui/react-context-menu" "^2.2.1" From e317b091179905f47ec0535edfcf0c1f6e7a599e Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Mon, 23 Dec 2024 14:59:30 +0100 Subject: [PATCH 03/13] Add advanced section --- res/css/_components.pcss | 2 + .../settings/encryption/_AdvancedPanel.pcss | 45 +++++++ .../encryption/_ResetIdentityPanel.pcss | 38 ++++++ .../settings/encryption/AdvancedPanel.tsx | 109 +++++++++++++++ .../encryption/ResetIdentityPanel.tsx | 125 ++++++++++++++++++ .../tabs/user/EncryptionUserSettingsTab.tsx | 24 +++- src/i18n/strings/en_EN.json | 15 +++ 7 files changed, 351 insertions(+), 7 deletions(-) create mode 100644 res/css/views/settings/encryption/_AdvancedPanel.pcss create mode 100644 res/css/views/settings/encryption/_ResetIdentityPanel.pcss create mode 100644 src/components/views/settings/encryption/AdvancedPanel.tsx create mode 100644 src/components/views/settings/encryption/ResetIdentityPanel.tsx diff --git a/res/css/_components.pcss b/res/css/_components.pcss index e0f9a5788de..bfab15625f2 100644 --- a/res/css/_components.pcss +++ b/res/css/_components.pcss @@ -353,8 +353,10 @@ @import "./views/settings/_ThemeChoicePanel.pcss"; @import "./views/settings/_UpdateCheckButton.pcss"; @import "./views/settings/_UserProfileSettings.pcss"; +@import "./views/settings/encryption/_AdvancedPanel.pcss"; @import "./views/settings/encryption/_ChangeRecoveryKey.pcss"; @import "./views/settings/encryption/_EncryptionCard.pcss"; +@import "./views/settings/encryption/_ResetIdentityPanel.pcss"; @import "./views/settings/tabs/_SettingsBanner.pcss"; @import "./views/settings/tabs/_SettingsIndent.pcss"; @import "./views/settings/tabs/_SettingsSection.pcss"; diff --git a/res/css/views/settings/encryption/_AdvancedPanel.pcss b/res/css/views/settings/encryption/_AdvancedPanel.pcss new file mode 100644 index 00000000000..46cccac5d44 --- /dev/null +++ b/res/css/views/settings/encryption/_AdvancedPanel.pcss @@ -0,0 +1,45 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. + */ + +.mx_AdvancedPanel_Details { + display: flex; + flex-direction: column; + gap: var(--cpd-space-6x); + width: 100%; + align-items: start; + + .mx_AdvancedPanel_Details_content { + display: flex; + flex-direction: column; + gap: var(--cpd-space-4x); + width: 100%; + + > span { + font: var(--cpd-font-body-lg-semibold); + padding-bottom: var(--cpd-space-2x); + border-bottom: 1px solid var(--cpd-color-gray-400); + } + + > div { + display: flex; + + > span { + width: 50%; + word-wrap: break-word; + } + } + + > div:nth-child(odd) { + background-color: var(--cpd-color-gray-200); + } + } + + .mx_AdvancedPanel_buttons { + display: flex; + gap: var(--cpd-space-4x); + } +} diff --git a/res/css/views/settings/encryption/_ResetIdentityPanel.pcss b/res/css/views/settings/encryption/_ResetIdentityPanel.pcss new file mode 100644 index 00000000000..b09d4f420cc --- /dev/null +++ b/res/css/views/settings/encryption/_ResetIdentityPanel.pcss @@ -0,0 +1,38 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. + */ + +.mx_ResetIdentityPanel { + .mx_ResetIdentityPanel_content { + display: flex; + flex-direction: column; + gap: var(--cpd-space-3x); + + > ul { + margin: 0; + list-style-type: none; + display: flex; + flex-direction: column; + gap: var(--cpd-space-1x); + + > li { + padding: var(--cpd-space-2x) var(--cpd-space-3x); + } + } + + > span { + font: var(--cpd-font-body-md-medium); + text-align: center; + } + } + + .mx_ResetIdentityPanel_footer { + display: flex; + flex-direction: column; + gap: var(--cpd-space-4x); + justify-content: center; + } +} diff --git a/src/components/views/settings/encryption/AdvancedPanel.tsx b/src/components/views/settings/encryption/AdvancedPanel.tsx new file mode 100644 index 00000000000..96b3031b3b5 --- /dev/null +++ b/src/components/views/settings/encryption/AdvancedPanel.tsx @@ -0,0 +1,109 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. + */ + +import React, { JSX, lazy, MouseEventHandler } from "react"; +import { Button, InlineSpinner } from "@vector-im/compound-web"; +import DownloadIcon from "@vector-im/compound-design-tokens/assets/web/icons/download"; +import ShareIcon from "@vector-im/compound-design-tokens/assets/web/icons/share"; + +import { _t } from "../../../../languageHandler"; +import { SettingsSection } from "../shared/SettingsSection"; +import { useMatrixClientContext } from "../../../../contexts/MatrixClientContext"; +import { useAsyncMemo } from "../../../../hooks/useAsyncMemo"; +import Modal from "../../../../Modal"; + +interface AdvancedPanelProps { + /** + * Callback for when the user clicks the button to reset their identity. + */ + onResetIdentityClick: MouseEventHandler; +} + +/** + * The advanced panel of the encryption settings. + */ +export function AdvancedPanel({ onResetIdentityClick }: AdvancedPanelProps): JSX.Element { + return ( + + + + ); +} + +interface EncryptionDetails { + /** + * Callback for when the user clicks the button to reset their identity. + */ + onResetIdentityClick: MouseEventHandler; +} + +/** + * The encryption details section of the advanced panel. + */ +function EncryptionDetails({ onResetIdentityClick }: EncryptionDetails): JSX.Element { + const matrixClient = useMatrixClientContext(); + // Null when the keys are not loaded yet + const keys = useAsyncMemo( + () => { + const crypto = matrixClient.getCrypto(); + return crypto ? crypto.getOwnDeviceKeys() : Promise.resolve(null); + }, + [matrixClient], + null, + ); + + return ( +
+
+ {_t("settings|encryption|advanced|details_title")} +
+ {_t("settings|encryption|advanced|session_id")} + {matrixClient.deviceId} +
+
+ {_t("settings|encryption|advanced|session_key")} + {keys ? keys.ed25519 : } +
+
+
+ + +
+ +
+ ); +} diff --git a/src/components/views/settings/encryption/ResetIdentityPanel.tsx b/src/components/views/settings/encryption/ResetIdentityPanel.tsx new file mode 100644 index 00000000000..ece220372bd --- /dev/null +++ b/src/components/views/settings/encryption/ResetIdentityPanel.tsx @@ -0,0 +1,125 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * Please see LICENSE files in the repository root for full details. + */ + +import { Breadcrumb, Button, VisualList, VisualListItem } from "@vector-im/compound-web"; +import CheckIcon from "@vector-im/compound-design-tokens/assets/web/icons/check"; +import InfoIcon from "@vector-im/compound-design-tokens/assets/web/icons/info"; +import ErrorIcon from "@vector-im/compound-design-tokens/assets/web/icons/error"; +import React, { MouseEventHandler } from "react"; +import { AuthDict, MatrixClient, UIAResponse } from "matrix-js-sdk/src/matrix"; + +import { _t } from "../../../../languageHandler"; +import { EncryptionCard } from "./EncryptionCard"; +import Modal from "../../../../Modal"; +import InteractiveAuthDialog from "../../dialogs/InteractiveAuthDialog"; +import { useMatrixClientContext } from "../../../../contexts/MatrixClientContext"; +import { SSOAuthEntry } from "../../auth/InteractiveAuthEntryComponents"; + +interface ResetIdentityPanelProps { + /** + * Called when the identity is reset. + */ + onFinish: MouseEventHandler; + /** + * Called when the cancel button is clicked or when we go back in the breadcrumbs. + */ + onCancelClick: () => void; +} + +/** + * The panel for resetting the identity of the current user. + */ +export function ResetIdentityPanel({ onCancelClick, onFinish }: ResetIdentityPanelProps): JSX.Element { + const matrixClient = useMatrixClientContext(); + + return ( + <> + + +
+ + + {_t("settings|encryption|advanced|breadcrumb_first_description")} + + + {_t("settings|encryption|advanced|breadcrumb_second_description")} + + + {_t("settings|encryption|advanced|breadcrumb_third_description")} + + + {_t("settings|encryption|advanced|breadcrumb_warning")} +
+
+ + +
+
+ + ); +} + +/** + * Handles the UIA flow for resetting the identity. + * @param matrixClient + * @param makeRequest + */ +async function uiAuthCallback( + matrixClient: MatrixClient, + makeRequest: (authData: AuthDict) => Promise>, +): Promise { + const dialogAesthetics = { + [SSOAuthEntry.PHASE_PREAUTH]: { + title: _t("auth|uia|sso_title"), + body: _t("auth|uia|sso_preauth_body"), + continueText: _t("auth|sso"), + continueKind: "primary", + }, + [SSOAuthEntry.PHASE_POSTAUTH]: { + title: _t("encryption|confirm_encryption_setup_title"), + body: _t("encryption|confirm_encryption_setup_body"), + continueText: _t("action|confirm"), + continueKind: "primary", + }, + }; + + const { finished } = Modal.createDialog(InteractiveAuthDialog, { + title: _t("encryption|bootstrap_title"), + matrixClient, + makeRequest, + aestheticsForStagePhases: { + [SSOAuthEntry.LOGIN_TYPE]: dialogAesthetics, + [SSOAuthEntry.UNSTABLE_LOGIN_TYPE]: dialogAesthetics, + }, + }); + const [confirmed] = await finished; + if (!confirmed) { + throw new Error("Cross-signing key upload auth canceled"); + } +} diff --git a/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx b/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx index d4304eb4d41..4c5030cb58e 100644 --- a/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx @@ -6,7 +6,7 @@ */ import React, { JSX, useCallback, useEffect, useState } from "react"; -import { Button, InlineSpinner } from "@vector-im/compound-web"; +import { Button, InlineSpinner, Separator } from "@vector-im/compound-web"; import ComputerIcon from "@vector-im/compound-design-tokens/assets/web/icons/computer"; import SettingsTab from "../SettingsTab"; @@ -18,6 +18,8 @@ import Modal from "../../../../../Modal"; import SetupEncryptionDialog from "../../../dialogs/security/SetupEncryptionDialog"; import { SettingsSection } from "../../shared/SettingsSection"; import { SettingsSubheader } from "../../SettingsSubheader"; +import { AdvancedPanel } from "../../encryption/AdvancedPanel"; +import { ResetIdentityPanel } from "../../encryption/ResetIdentityPanel"; /** * The state in the encryption settings tab. @@ -29,8 +31,9 @@ import { SettingsSubheader } from "../../SettingsSubheader"; * This happens when the user has a recovery key and the user clicks on "Change recovery key" button of the RecoveryPanel. * - "set_recovery_key": The panel to show when the user is setting up their recovery key. * This happens when the user doesn't have a key a recovery key and the user clicks on "Set up recovery key" button of the RecoveryPanel. + * - "reset_identity": The panel to show when the user is resetting their identity. */ -type State = "loading" | "main" | "set_up_encryption" | "change_recovery_key" | "set_recovery_key"; +type State = "loading" | "main" | "set_up_encryption" | "change_recovery_key" | "set_recovery_key" | "reset_identity"; export function EncryptionUserSettingsTab(): JSX.Element { const [state, setState] = useState("loading"); @@ -46,11 +49,15 @@ export function EncryptionUserSettingsTab(): JSX.Element { break; case "main": content = ( - - setupNewKey ? setState("set_recovery_key") : setState("change_recovery_key") - } - /> + <> + + setupNewKey ? setState("set_recovery_key") : setState("change_recovery_key") + } + /> + + setState("reset_identity")} /> + ); break; case "change_recovery_key": @@ -63,6 +70,9 @@ export function EncryptionUserSettingsTab(): JSX.Element { /> ); break; + case "reset_identity": + content = setState("main")} onFinish={() => setState("main")} />; + break; } return ( diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 37a739a62e9..c255af05e8f 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2418,6 +2418,21 @@ "enable_markdown": "Enable Markdown", "enable_markdown_description": "Start messages with /plain to send without markdown.", "encryption": { + "advanced": { + "breadcrumb_first_description": "Your account details, contacts, preferences, and chat list will be kept", + "breadcrumb_page": "Reset encryption", + "breadcrumb_second_description": "You will lose any message history that’s stored only on the server", + "breadcrumb_third_description": "You will need to verify all your existing devices and contacts again", + "breadcrumb_title": "Are you sure you want to reset your identity?", + "breadcrumb_warning": "Only do this if you believe your account has been compromised.", + "details_title": "Encryption details", + "export_keys": "Export keys", + "import_keys": "Import keys", + "reset_identity": "Reset cryptographic identity", + "session_id": "Session ID:", + "session_key": "Session key:", + "title": "Advanced" + }, "device_not_verified_button": "Verify this device", "device_not_verified_description": "You need to verify this device in order to view your encryption settings.", "device_not_verified_title": "Device not verified", From 54077902d4b1863c3ab18f4cc2d4344da0524cc7 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Mon, 23 Dec 2024 15:52:22 +0100 Subject: [PATCH 04/13] Add the `Never send encrypted messages to unverified devices` settings --- .../settings/encryption/_AdvancedPanel.pcss | 19 +++++---- .../settings/encryption/AdvancedPanel.tsx | 41 ++++++++++++++++++- src/i18n/strings/en_EN.json | 3 ++ 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/res/css/views/settings/encryption/_AdvancedPanel.pcss b/res/css/views/settings/encryption/_AdvancedPanel.pcss index 46cccac5d44..d99afe016a1 100644 --- a/res/css/views/settings/encryption/_AdvancedPanel.pcss +++ b/res/css/views/settings/encryption/_AdvancedPanel.pcss @@ -5,25 +5,30 @@ * Please see LICENSE files in the repository root for full details. */ -.mx_AdvancedPanel_Details { +.mx_AdvancedPanel_Details, +.mx_OtherSettings { display: flex; flex-direction: column; gap: var(--cpd-space-6x); width: 100%; align-items: start; + .mx_AdvancedPanel_Details_title, + .mx_OtherSettings_title { + font: var(--cpd-font-body-lg-semibold); + padding-bottom: var(--cpd-space-2x); + border-bottom: 1px solid var(--cpd-color-gray-400); + width: 100%; + } +} + +.mx_AdvancedPanel_Details { .mx_AdvancedPanel_Details_content { display: flex; flex-direction: column; gap: var(--cpd-space-4x); width: 100%; - > span { - font: var(--cpd-font-body-lg-semibold); - padding-bottom: var(--cpd-space-2x); - border-bottom: 1px solid var(--cpd-color-gray-400); - } - > div { display: flex; diff --git a/src/components/views/settings/encryption/AdvancedPanel.tsx b/src/components/views/settings/encryption/AdvancedPanel.tsx index 96b3031b3b5..4305dd0c0aa 100644 --- a/src/components/views/settings/encryption/AdvancedPanel.tsx +++ b/src/components/views/settings/encryption/AdvancedPanel.tsx @@ -6,7 +6,7 @@ */ import React, { JSX, lazy, MouseEventHandler } from "react"; -import { Button, InlineSpinner } from "@vector-im/compound-web"; +import { Button, HelpMessage, InlineField, InlineSpinner, Label, Root, ToggleControl } from "@vector-im/compound-web"; import DownloadIcon from "@vector-im/compound-design-tokens/assets/web/icons/download"; import ShareIcon from "@vector-im/compound-design-tokens/assets/web/icons/share"; @@ -15,6 +15,9 @@ import { SettingsSection } from "../shared/SettingsSection"; import { useMatrixClientContext } from "../../../../contexts/MatrixClientContext"; import { useAsyncMemo } from "../../../../hooks/useAsyncMemo"; import Modal from "../../../../Modal"; +import { SettingLevel } from "../../../../settings/SettingLevel"; +import { useSettingValueAt } from "../../../../hooks/useSettings"; +import SettingsStore from "../../../../settings/SettingsStore"; interface AdvancedPanelProps { /** @@ -30,6 +33,7 @@ export function AdvancedPanel({ onResetIdentityClick }: AdvancedPanelProps): JSX return ( + ); } @@ -59,7 +63,9 @@ function EncryptionDetails({ onResetIdentityClick }: EncryptionDetails): JSX.Ele return (
- {_t("settings|encryption|advanced|details_title")} + + {_t("settings|encryption|advanced|details_title")} +
{_t("settings|encryption|advanced|session_id")} {matrixClient.deviceId} @@ -107,3 +113,34 @@ function EncryptionDetails({ onResetIdentityClick }: EncryptionDetails): JSX.Ele
); } + +/** + * Display the never send encrypted message to unverified devices setting. + */ +function OtherSettings(): JSX.Element | null { + const blacklistUnverifiedDevices = useSettingValueAt(SettingLevel.DEVICE, "blacklistUnverifiedDevices"); + const canSetValue = SettingsStore.canSetValue("blacklistUnverifiedDevices", null, SettingLevel.DEVICE); + if (!canSetValue) return null; + + return ( + { + const checked = new FormData(evt.currentTarget).get("neverSendEncrypted") === "on"; + await SettingsStore.setValue("blacklistUnverifiedDevices", null, SettingLevel.DEVICE, checked); + }} + > + + {_t("settings|encryption|advanced|other_people_device_title")} + + } + > + + {_t("settings|encryption|advanced|other_people_device_description")} + + + ); +} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index c255af05e8f..25735eceaee 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -2428,6 +2428,9 @@ "details_title": "Encryption details", "export_keys": "Export keys", "import_keys": "Import keys", + "other_people_device_description": "By default in encrypted rooms, do not send encrypted messages to anyone until you’ve verified them", + "other_people_device_label": "Never send encrypted messages to unverified devices", + "other_people_device_title": "Other people’s devices", "reset_identity": "Reset cryptographic identity", "session_id": "Session ID:", "session_key": "Session key:", From 9c13d3df7bf438aebb9f2708fa6f08655c395c3d Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Wed, 8 Jan 2025 14:27:00 +0100 Subject: [PATCH 05/13] - Add commercial license - Remove generic type --- res/css/views/settings/encryption/_AdvancedPanel.pcss | 2 +- res/css/views/settings/encryption/_ResetIdentityPanel.pcss | 2 +- src/components/views/settings/encryption/AdvancedPanel.tsx | 4 ++-- .../views/settings/encryption/ResetIdentityPanel.tsx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/res/css/views/settings/encryption/_AdvancedPanel.pcss b/res/css/views/settings/encryption/_AdvancedPanel.pcss index d99afe016a1..5202b46ae17 100644 --- a/res/css/views/settings/encryption/_AdvancedPanel.pcss +++ b/res/css/views/settings/encryption/_AdvancedPanel.pcss @@ -1,7 +1,7 @@ /* * Copyright 2024 New Vector Ltd. * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. */ diff --git a/res/css/views/settings/encryption/_ResetIdentityPanel.pcss b/res/css/views/settings/encryption/_ResetIdentityPanel.pcss index b09d4f420cc..3c382990a27 100644 --- a/res/css/views/settings/encryption/_ResetIdentityPanel.pcss +++ b/res/css/views/settings/encryption/_ResetIdentityPanel.pcss @@ -1,7 +1,7 @@ /* * Copyright 2024 New Vector Ltd. * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. */ diff --git a/src/components/views/settings/encryption/AdvancedPanel.tsx b/src/components/views/settings/encryption/AdvancedPanel.tsx index 4305dd0c0aa..d46f8770daf 100644 --- a/src/components/views/settings/encryption/AdvancedPanel.tsx +++ b/src/components/views/settings/encryption/AdvancedPanel.tsx @@ -1,7 +1,7 @@ /* * Copyright 2024 New Vector Ltd. * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. */ @@ -118,7 +118,7 @@ function EncryptionDetails({ onResetIdentityClick }: EncryptionDetails): JSX.Ele * Display the never send encrypted message to unverified devices setting. */ function OtherSettings(): JSX.Element | null { - const blacklistUnverifiedDevices = useSettingValueAt(SettingLevel.DEVICE, "blacklistUnverifiedDevices"); + const blacklistUnverifiedDevices = useSettingValueAt(SettingLevel.DEVICE, "blacklistUnverifiedDevices"); const canSetValue = SettingsStore.canSetValue("blacklistUnverifiedDevices", null, SettingLevel.DEVICE); if (!canSetValue) return null; diff --git a/src/components/views/settings/encryption/ResetIdentityPanel.tsx b/src/components/views/settings/encryption/ResetIdentityPanel.tsx index ece220372bd..33f5cf1a4a9 100644 --- a/src/components/views/settings/encryption/ResetIdentityPanel.tsx +++ b/src/components/views/settings/encryption/ResetIdentityPanel.tsx @@ -1,7 +1,7 @@ /* * Copyright 2024 New Vector Ltd. * - * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. */ From a5ccc9a9d39bb627396c7049619a6c8279eeb2bb Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Mon, 13 Jan 2025 10:46:31 +0100 Subject: [PATCH 06/13] Rename EncryptionDetails css classes --- res/css/views/settings/encryption/_AdvancedPanel.pcss | 10 +++++----- .../views/settings/encryption/AdvancedPanel.tsx | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/res/css/views/settings/encryption/_AdvancedPanel.pcss b/res/css/views/settings/encryption/_AdvancedPanel.pcss index 5202b46ae17..cf61bb1568b 100644 --- a/res/css/views/settings/encryption/_AdvancedPanel.pcss +++ b/res/css/views/settings/encryption/_AdvancedPanel.pcss @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -.mx_AdvancedPanel_Details, +.mx_EncryptionDetails, .mx_OtherSettings { display: flex; flex-direction: column; @@ -13,7 +13,7 @@ width: 100%; align-items: start; - .mx_AdvancedPanel_Details_title, + .mx_EncryptionDetails_session_title, .mx_OtherSettings_title { font: var(--cpd-font-body-lg-semibold); padding-bottom: var(--cpd-space-2x); @@ -22,8 +22,8 @@ } } -.mx_AdvancedPanel_Details { - .mx_AdvancedPanel_Details_content { +.mx_EncryptionDetails { + .mx_EncryptionDetails_session { display: flex; flex-direction: column; gap: var(--cpd-space-4x); @@ -43,7 +43,7 @@ } } - .mx_AdvancedPanel_buttons { + .mx_EncryptionDetails_buttons { display: flex; gap: var(--cpd-space-4x); } diff --git a/src/components/views/settings/encryption/AdvancedPanel.tsx b/src/components/views/settings/encryption/AdvancedPanel.tsx index d46f8770daf..856f27821c4 100644 --- a/src/components/views/settings/encryption/AdvancedPanel.tsx +++ b/src/components/views/settings/encryption/AdvancedPanel.tsx @@ -61,9 +61,9 @@ function EncryptionDetails({ onResetIdentityClick }: EncryptionDetails): JSX.Ele ); return ( -
-
- +
+
+ {_t("settings|encryption|advanced|details_title")}
@@ -75,7 +75,7 @@ function EncryptionDetails({ onResetIdentityClick }: EncryptionDetails): JSX.Ele {keys ? keys.ed25519 : }
-
+
+ +
+ +
+`; + +exports[` should display the device keys 1`] = ` +
+
+

+ Encryption details +

+
+ + Session ID: + + + ABCDEFGHI + +
+
+ + Session key: + + + ed25519 + +
+
+
+ + +
+ +
+`; + +exports[` should display the blacklist of unverified devices settings 1`] = ` +
+

+ Other people’s devices +

+
+
+
+ +
+
+
+
+ + + By default in encrypted rooms, do not send encrypted messages to anyone until you’ve verified them + +
+
+ +`; From 82728a1050e5baca18ce6c5399ef8feb7cf674d5 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Thu, 16 Jan 2025 16:24:21 +0100 Subject: [PATCH 10/13] Add tests to `EncryptionUserSettingsTab` --- .../user/EncryptionUserSettingsTab-test.tsx | 15 ++ .../EncryptionUserSettingsTab-test.tsx.snap | 192 ++++++++++++++++++ 2 files changed, 207 insertions(+) diff --git a/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx b/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx index 49ce1404216..a1de62a32a4 100644 --- a/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx +++ b/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx @@ -94,4 +94,19 @@ describe("", () => { await waitFor(() => expect(screen.getByText("Set up recovery")).toBeInTheDocument()); expect(asFragment()).toMatchSnapshot(); }); + + it("should display the reset identity panel when the user clicks on the reset cryptographic identity panel", async () => { + const user = userEvent.setup(); + + const { asFragment } = renderComponent(); + await waitFor(() => { + const button = screen.getByRole("button", { name: "Reset cryptographic identity" }); + expect(button).toBeInTheDocument(); + user.click(button); + }); + await waitFor(() => + expect(screen.getByText("Are you sure you want to reset your identity?")).toBeInTheDocument(), + ); + expect(asFragment()).toMatchSnapshot(); + }); }); diff --git a/test/unit-tests/components/views/settings/tabs/user/__snapshots__/EncryptionUserSettingsTab-test.tsx.snap b/test/unit-tests/components/views/settings/tabs/user/__snapshots__/EncryptionUserSettingsTab-test.tsx.snap index 71ec4deb592..b460b91e512 100644 --- a/test/unit-tests/components/views/settings/tabs/user/__snapshots__/EncryptionUserSettingsTab-test.tsx.snap +++ b/test/unit-tests/components/views/settings/tabs/user/__snapshots__/EncryptionUserSettingsTab-test.tsx.snap @@ -81,6 +81,198 @@ exports[` should display the change recovery key pa `; +exports[` should display the reset identity panel when the user clicks on the reset cryptographic identity panel 1`] = ` + +
+
+ +
+
+
+ + + +
+

+ Are you sure you want to reset your identity? +

+
+
+
    +
  • + + Your account details, contacts, preferences, and chat list will be kept +
  • +
  • + + You will lose any message history that’s stored only on the server +
  • +
  • + + You will need to verify all your existing devices and contacts again +
  • +
+ + Only do this if you believe your account has been compromised. + +
+ +
+
+
+
+`; + exports[` should display the set up recovery key when the user clicks on the set up recovery key button 1`] = `
Date: Thu, 16 Jan 2025 16:34:23 +0100 Subject: [PATCH 11/13] Add tests to `ResetIdentityPanel` --- test/test-utils/test-utils.ts | 1 + .../encryption/ResetIdentityPanel-test.tsx | 37 ++++ .../ResetIdentityPanel-test.tsx.snap | 184 ++++++++++++++++++ 3 files changed, 222 insertions(+) create mode 100644 test/unit-tests/components/views/settings/encryption/ResetIdentityPanel-test.tsx create mode 100644 test/unit-tests/components/views/settings/encryption/__snapshots__/ResetIdentityPanel-test.tsx.snap diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 3be82e3ee86..b474a24aa81 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -151,6 +151,7 @@ export function createTestClient(): MatrixClient { }, }), isCrossSigningReady: jest.fn().mockResolvedValue(false), + resetEncryption: jest.fn(), }), getPushActionsForEvent: jest.fn(), diff --git a/test/unit-tests/components/views/settings/encryption/ResetIdentityPanel-test.tsx b/test/unit-tests/components/views/settings/encryption/ResetIdentityPanel-test.tsx new file mode 100644 index 00000000000..dc791a6a35c --- /dev/null +++ b/test/unit-tests/components/views/settings/encryption/ResetIdentityPanel-test.tsx @@ -0,0 +1,37 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React from "react"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; +import { render, screen } from "jest-matrix-react"; +import userEvent from "@testing-library/user-event"; + +import { ResetIdentityPanel } from "../../../../../../src/components/views/settings/encryption/ResetIdentityPanel"; +import { createTestClient, withClientContextRenderOptions } from "../../../../../test-utils"; + +describe("", () => { + let matrixClient: MatrixClient; + + beforeEach(() => { + matrixClient = createTestClient(); + }); + + it("should reset the encryption when the continue button is clicked", async () => { + const user = userEvent.setup(); + + const onFinish = jest.fn(); + const { asFragment } = render( + , + withClientContextRenderOptions(matrixClient), + ); + expect(asFragment()).toMatchSnapshot(); + + await user.click(screen.getByRole("button", { name: "Continue" })); + expect(matrixClient.getCrypto()!.resetEncryption).toHaveBeenCalled(); + expect(onFinish).toHaveBeenCalled(); + }); +}); diff --git a/test/unit-tests/components/views/settings/encryption/__snapshots__/ResetIdentityPanel-test.tsx.snap b/test/unit-tests/components/views/settings/encryption/__snapshots__/ResetIdentityPanel-test.tsx.snap new file mode 100644 index 00000000000..7635ad06121 --- /dev/null +++ b/test/unit-tests/components/views/settings/encryption/__snapshots__/ResetIdentityPanel-test.tsx.snap @@ -0,0 +1,184 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` should reset the encryption when the continue button is clicked 1`] = ` + + +
+
+
+ + + +
+

+ Are you sure you want to reset your identity? +

+
+
+
    +
  • + + Your account details, contacts, preferences, and chat list will be kept +
  • +
  • + + You will lose any message history that’s stored only on the server +
  • +
  • + + You will need to verify all your existing devices and contacts again +
  • +
+ + Only do this if you believe your account has been compromised. + +
+ +
+
+`; From 6385015172b4fca78e1d149520a5fd6211437b04 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Mon, 20 Jan 2025 16:29:03 +0100 Subject: [PATCH 12/13] Get only the recovery section in recovery tests --- .../e2e/settings/encryption-user-tab/index.ts | 7 +++++++ .../encryption-user-tab/recovery.spec.ts | 16 ++++++++++------ .../default-recovery-linux.png | Bin 17595 -> 16554 bytes .../recovery.spec.ts/default-tab-linux.png | Bin 0 -> 37566 bytes .../out-of-sync-recovery-linux.png | Bin 22347 -> 21423 bytes .../set-up-recovery-linux.png | Bin 17926 -> 16874 bytes .../settings/encryption/RecoveryPanel.tsx | 1 + 7 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 playwright/snapshots/settings/encryption-user-tab/recovery.spec.ts/default-tab-linux.png diff --git a/playwright/e2e/settings/encryption-user-tab/index.ts b/playwright/e2e/settings/encryption-user-tab/index.ts index f8adbb2e336..766a21d6e4a 100644 --- a/playwright/e2e/settings/encryption-user-tab/index.ts +++ b/playwright/e2e/settings/encryption-user-tab/index.ts @@ -67,6 +67,13 @@ class Helpers { return this.page.getByTestId("encryptionTab"); } + /** + * Get the recovery section + */ + getEncryptionRecoverySection() { + return this.page.getByTestId("recoveryPanel"); + } + /** * Set the default key id of the secret storage to `null` */ diff --git a/playwright/e2e/settings/encryption-user-tab/recovery.spec.ts b/playwright/e2e/settings/encryption-user-tab/recovery.spec.ts index e6812cd450b..c039030a3f6 100644 --- a/playwright/e2e/settings/encryption-user-tab/recovery.spec.ts +++ b/playwright/e2e/settings/encryption-user-tab/recovery.spec.ts @@ -32,15 +32,19 @@ test.describe("Recovery section in Encryption tab", () => { test("should verify the device", { tag: "@screenshot" }, async ({ page, app, util }) => { const dialog = await util.openEncryptionTab(); + const content = util.getEncryptionTabContent(); // The user's device is in an unverified state, therefore the only option available to them here is to verify it const verifyButton = dialog.getByRole("button", { name: "Verify this device" }); await expect(verifyButton).toBeVisible(); - await expect(util.getEncryptionTabContent()).toMatchScreenshot("verify-device-encryption-tab.png"); + await expect(content).toMatchScreenshot("verify-device-encryption-tab.png"); await verifyButton.click(); await util.verifyDevice(recoveryKey); - await expect(util.getEncryptionTabContent()).toMatchScreenshot("default-recovery.png"); + + await expect(content).toMatchScreenshot("default-tab.png", { + mask: [content.getByTestId("deviceId"), content.getByTestId("sessionKey")], + }); // Check that our device is now cross-signed await checkDeviceIsCrossSigned(app); @@ -61,7 +65,7 @@ test.describe("Recovery section in Encryption tab", () => { // The user can only change the recovery key const changeButton = dialog.getByRole("button", { name: "Change recovery key" }); await expect(changeButton).toBeVisible(); - await expect(util.getEncryptionTabContent()).toMatchScreenshot("default-recovery.png"); + await expect(util.getEncryptionRecoverySection()).toMatchScreenshot("default-recovery.png"); await changeButton.click(); // Display the new recovery key and click on the copy button @@ -89,7 +93,7 @@ test.describe("Recovery section in Encryption tab", () => { const dialog = await util.openEncryptionTab(); const setupButton = dialog.getByRole("button", { name: "Set up recovery" }); await expect(setupButton).toBeVisible(); - await expect(util.getEncryptionTabContent()).toMatchScreenshot("set-up-recovery.png"); + await expect(util.getEncryptionRecoverySection()).toMatchScreenshot("set-up-recovery.png"); await setupButton.click(); // Display an informative panel about the recovery key @@ -137,12 +141,12 @@ test.describe("Recovery section in Encryption tab", () => { const dialog = util.getEncryptionTabContent(); const enterKeyButton = dialog.getByRole("button", { name: "Enter recovery key" }); await expect(enterKeyButton).toBeVisible(); - await expect(dialog).toMatchScreenshot("out-of-sync-recovery.png"); + await expect(util.getEncryptionRecoverySection()).toMatchScreenshot("out-of-sync-recovery.png"); await enterKeyButton.click(); // Fill the recovery key await util.enterRecoveryKey(recoveryKey); - await expect(dialog).toMatchScreenshot("default-recovery.png"); + await expect(util.getEncryptionRecoverySection()).toMatchScreenshot("default-recovery.png"); // Check that our device is now cross-signed await checkDeviceIsCrossSigned(app); diff --git a/playwright/snapshots/settings/encryption-user-tab/recovery.spec.ts/default-recovery-linux.png b/playwright/snapshots/settings/encryption-user-tab/recovery.spec.ts/default-recovery-linux.png index 971745c4128843a615132ff18e51eebdbbdaeb17..8a0f80fcea8babe6317de6cb5cdd8f556cb8b1be 100644 GIT binary patch literal 16554 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 literal 17595 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 OL|Rk diff --git a/playwright/snapshots/settings/encryption-user-tab/recovery.spec.ts/default-tab-linux.png b/playwright/snapshots/settings/encryption-user-tab/recovery.spec.ts/default-tab-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..d14cff80714efb0ec36766876a9c213fa700246a GIT binary patch literal 37566 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

J&MN+Qgq6Fs@jEzU<@MUb=F9#+|64) zPfKQyH|+wS`1%d}9Quvq21{;W_VE^_98m)-mGjEVNQZFd7(Ea^N$A{Kb`S-71*-p% zY#nU-^|_O)0cz_}W2YH7g(+H$#%z6(FvhMa14a|?u1}C4=y3YkpJa|hbQ1y_DLFM( zq38sb9B_P#VIG6U>0G_<(S<71Q@i6sKV=O5D!!#WK=D904~{PQ?`qhxgW4m@riK@x z;A5^9plcU+&m^Nd1f$l42XXw!B_F$1t2epf8O-jF{0}c0pR}zVEqC$!^`)t0G-2{J z7-Ie?>gC1FDRpa`qrv9p$@FyFimKzwuN;99QEdzXZ{jNFYfWJtZGGFC`^L70<~G67 ggrt+;=|eQSIBl2Q(&o$JV7YWUT5!!`4ZBzW0qzmO^8f$< literal 22347 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 literal 17926 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 } subHeading={} + data-testid="recoveryPanel" > {content} From e3f832bed32b72c4c91824117efefaf4ec7363f3 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 21 Jan 2025 16:43:02 +0100 Subject: [PATCH 13/13] Replicate otk bug with test `should reset the cryptographic identity` --- .../encryption-user-tab/advanced.spec.ts | 79 +++++++++++++++++++ .../e2e/settings/encryption-user-tab/index.ts | 9 +++ 2 files changed, 88 insertions(+) create mode 100644 playwright/e2e/settings/encryption-user-tab/advanced.spec.ts diff --git a/playwright/e2e/settings/encryption-user-tab/advanced.spec.ts b/playwright/e2e/settings/encryption-user-tab/advanced.spec.ts new file mode 100644 index 00000000000..8caafad2194 --- /dev/null +++ b/playwright/e2e/settings/encryption-user-tab/advanced.spec.ts @@ -0,0 +1,79 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { test, expect } from "./index"; +import { + checkDeviceIsConnectedKeyBackup, + checkDeviceIsCrossSigned, + createBot, + verifySession, +} from "../../crypto/utils"; + +test.describe("Advanced section in Encryption tab", () => { + let expectedBackupVersion: string; + + test.beforeEach(async ({ page, app, homeserver, credentials }) => { + const res = await createBot(page, homeserver, credentials); + expectedBackupVersion = res.expectedBackupVersion; + }); + + test("should show the encryption details", { tag: "@screenshot" }, async ({ page, app, util }) => { + await verifySession(app, "new passphrase"); + await util.openEncryptionTab(); + const section = util.getEncryptionDetailsSection(); + + const deviceId = await page.evaluate(() => window.mxMatrixClientPeg.get().getDeviceId()); + await expect(section.getByText(deviceId)).toBeVisible(); + + await expect(section).toMatchScreenshot("encryption-details.png", { + mask: [section.getByTestId("deviceId"), section.getByTestId("sessionKey")], + }); + }); + + test("should show the import room keys dialog", async ({ page, app, util }) => { + await verifySession(app, "new passphrase"); + await util.openEncryptionTab(); + const section = util.getEncryptionDetailsSection(); + + await section.getByRole("button", { name: "Import keys" }).click(); + await expect(page.getByRole("heading", { name: "Import room keys" })).toBeVisible(); + }); + + test("should show the export room keys dialog", async ({ page, app, util }) => { + await verifySession(app, "new passphrase"); + await util.openEncryptionTab(); + const section = util.getEncryptionDetailsSection(); + + await section.getByRole("button", { name: "Export keys" }).click(); + await expect(page.getByRole("heading", { name: "Export room keys" })).toBeVisible(); + }); + + test("should reset the cryptographic identity", { tag: "@screenshot" }, async ({ page, app, util }) => { + test.slow(); + + await verifySession(app, "new passphrase"); + const tab = await util.openEncryptionTab(); + const section = util.getEncryptionDetailsSection(); + + await section.getByRole("button", { name: "Reset cryptographic identity" }).click(); + await expect(util.getEncryptionTabContent()).toMatchScreenshot("reset-cryptographic-identity.png"); + await tab.getByRole("button", { name: "Continue" }).click(); + + await expect(section.getByRole("button", { name: "Reset cryptographic identity" })).toBeVisible(); + // After resetting the identity, the user should set up a new recovery key + await expect( + util.getEncryptionRecoverySection().getByRole("button", { name: "Set up recovery" }), + ).toBeVisible(); + + await checkDeviceIsCrossSigned(app); + + await app.closeDialog(); + // The key backup was enabled before resetting the identity + // We create a new one after the reset + await checkDeviceIsConnectedKeyBackup(page, `${parseInt(expectedBackupVersion) + 1}`, true); + }); +}); diff --git a/playwright/e2e/settings/encryption-user-tab/index.ts b/playwright/e2e/settings/encryption-user-tab/index.ts index 766a21d6e4a..99db6217edc 100644 --- a/playwright/e2e/settings/encryption-user-tab/index.ts +++ b/playwright/e2e/settings/encryption-user-tab/index.ts @@ -18,6 +18,8 @@ export { expect }; export const test = base.extend<{ util: Helpers; }>({ + displayName: "Alice", + util: async ({ page, app, bot }, use) => { await use(new Helpers(page, app)); }, @@ -74,6 +76,13 @@ class Helpers { return this.page.getByTestId("recoveryPanel"); } + /** + * Get the encryption details section + */ + getEncryptionDetailsSection() { + return this.page.getByTestId("encryptionDetails"); + } + /** * Set the default key id of the secret storage to `null` */