Skip to content

Commit e5dea48

Browse files
committed
Use new labels when changing the recovery key
1 parent 0a52b7c commit e5dea48

File tree

7 files changed

+59
-19
lines changed

7 files changed

+59
-19
lines changed

playwright/e2e/settings/encryption-user-tab/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,19 @@ class Helpers {
8080
/**
8181
* Get the security key from the clipboard and fill in the input field
8282
* Then click on the finish button
83+
* @param title - The title of the dialog
84+
* @param confirmButtonLabel - The label of the confirm button
8385
* @param screenshot
8486
*/
85-
async confirmRecoveryKey(screenshot: `${string}.png`) {
87+
async confirmRecoveryKey(title: string, confirmButtonLabel: string, screenshot: `${string}.png`) {
8688
const dialog = this.getEncryptionTabContent();
87-
await expect(dialog.getByText("Enter your recovery key to confirm")).toBeVisible();
89+
await expect(dialog.getByText(title, { exact: true })).toBeVisible();
8890
await expect(dialog).toMatchScreenshot(screenshot);
8991

9092
const handle = await this.page.evaluateHandle(() => navigator.clipboard.readText());
9193
const clipboardContent = await handle.jsonValue();
9294
await dialog.getByRole("textbox").fill(clipboardContent);
93-
await dialog.getByRole("button", { name: "Finish set up" }).click();
95+
await dialog.getByRole("button", { name: confirmButtonLabel }).click();
9496
await expect(dialog).toMatchScreenshot("default-recovery.png");
9597
}
9698
}

playwright/e2e/settings/encryption-user-tab/recovery.spec.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ test.describe("Recovery section in Encryption tab", () => {
7373
await dialog.getByRole("button", { name: "Continue" }).click();
7474

7575
// Confirm the recovery key
76-
await util.confirmRecoveryKey("change-key-2-encryption-tab.png");
76+
await util.confirmRecoveryKey(
77+
"Enter your new recovery key",
78+
"Confirm new recovery key",
79+
"change-key-2-encryption-tab.png",
80+
);
7781
},
7882
);
7983

@@ -102,7 +106,11 @@ test.describe("Recovery section in Encryption tab", () => {
102106
await dialog.getByRole("button", { name: "Continue" }).click();
103107

104108
// Confirm the recovery key
105-
await util.confirmRecoveryKey("set-up-key-3-encryption-tab.png");
109+
await util.confirmRecoveryKey(
110+
"Enter your recovery key to confirm",
111+
"Finish set up",
112+
"set-up-key-3-encryption-tab.png",
113+
);
106114

107115
// The recovery key is now set up and the user can change it
108116
await expect(dialog.getByRole("button", { name: "Change recovery key" })).toBeVisible();
-2.19 KB
Loading
-227 Bytes
Loading

src/components/views/settings/encryption/ChangeRecoveryKey.tsx

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,15 @@ import { withSecretStorageKeyCache } from "../../../../SecurityManager";
3232
* - `inform_user`: The user is informed about the recovery key.
3333
* - `save_key_setup_flow`: The user is asked to save the new recovery key during the setup flow.
3434
* - `save_key_change_flow`: The user is asked to save the new recovery key during the change key flow.
35-
* - `confirm`: The user is asked to confirm the new recovery key.
35+
* - `confirm_key_setup_flow`: The user is asked to confirm the new recovery key during the set up flow.
36+
* - `confirm_key_change_flow`: The user is asked to confirm the new recovery key during the change key flow.
3637
*/
37-
type State = "inform_user" | "save_key_setup_flow" | "save_key_change_flow" | "confirm";
38+
type State =
39+
| "inform_user"
40+
| "save_key_setup_flow"
41+
| "save_key_change_flow"
42+
| "confirm_key_setup_flow"
43+
| "confirm_key_change_flow";
3844

3945
interface ChangeRecoveryKeyProps {
4046
/**
@@ -89,12 +95,19 @@ export function ChangeRecoveryKey({
8995
<KeyPanel
9096
// encodedPrivateKey is always defined, the optional typing is incorrect
9197
recoveryKey={recoveryKey.encodedPrivateKey!}
92-
onConfirmClick={() => setState("confirm")}
98+
onConfirmClick={() =>
99+
setState((currentState) =>
100+
currentState === "save_key_change_flow"
101+
? "confirm_key_change_flow"
102+
: "confirm_key_setup_flow",
103+
)
104+
}
93105
onCancelClick={onCancelClick}
94106
/>
95107
);
96108
break;
97-
case "confirm":
109+
case "confirm_key_setup_flow":
110+
case "confirm_key_change_flow":
98111
// Ask the user to enter the recovery key they just save to confirm it.
99112
content = (
100113
<KeyForm
@@ -120,6 +133,11 @@ export function ChangeRecoveryKey({
120133
logger.error("Failed to bootstrap secret storage", e);
121134
}
122135
}}
136+
submitButtonLabel={
137+
state === "confirm_key_setup_flow"
138+
? _t("settings|encryption|recovery|set_up_recovery_confirm_button")
139+
: _t("settings|encryption|recovery|change_recovery_confirm_button")
140+
}
123141
/>
124142
);
125143
}
@@ -181,10 +199,15 @@ function getLabels(state: State): Labels {
181199
title: _t("settings|encryption|recovery|change_recovery_key_title"),
182200
description: _t("settings|encryption|recovery|change_recovery_key_description"),
183201
};
184-
case "confirm":
202+
case "confirm_key_setup_flow":
185203
return {
186-
title: _t("settings|encryption|recovery|confirm_title"),
187-
description: _t("settings|encryption|recovery|confirm_description"),
204+
title: _t("settings|encryption|recovery|set_up_recovery_confirm_title"),
205+
description: _t("settings|encryption|recovery|set_up_recovery_confirm_description"),
206+
};
207+
case "confirm_key_change_flow":
208+
return {
209+
title: _t("settings|encryption|recovery|change_recovery_confirm_title"),
210+
description: _t("settings|encryption|recovery|change_recovery_confirm_description"),
188211
};
189212
}
190213
}
@@ -279,14 +302,18 @@ interface KeyFormProps {
279302
* The recovery key to confirm.
280303
*/
281304
recoveryKey: string;
305+
/**
306+
* The label for the submit button.
307+
*/
308+
submitButtonLabel: string;
282309
}
283310

284311
/**
285312
* The form to confirm the recovery key.
286313
* The finish button is disabled until the key is filled and valid.
287314
* The entered key is valid if it matches the recovery key.
288315
*/
289-
function KeyForm({ onCancelClick, onSubmit, recoveryKey }: KeyFormProps): JSX.Element {
316+
function KeyForm({ onCancelClick, onSubmit, recoveryKey, submitButtonLabel }: KeyFormProps): JSX.Element {
290317
// Undefined by default, as the key is not filled yet
291318
const [isKeyValid, setIsKeyValid] = useState<boolean>();
292319
const isKeyInvalidAndFilled = isKeyValid === false;
@@ -316,7 +343,7 @@ function KeyForm({ onCancelClick, onSubmit, recoveryKey }: KeyFormProps): JSX.El
316343
)}
317344
</Field>
318345
<div className="mx_ChangeRecoveryKey_footer">
319-
<Button disabled={!isKeyValid}>{_t("settings|encryption|recovery|confirm_finish")}</Button>
346+
<Button disabled={!isKeyValid}>{submitButtonLabel}</Button>
320347
<Button kind="tertiary" onClick={onCancelClick}>
321348
{_t("action|cancel")}
322349
</Button>

src/i18n/strings/en_EN.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2472,19 +2472,22 @@
24722472
"device_not_verified_title": "Device not verified",
24732473
"dialog_title": "<strong>Settings:</strong> Encryption",
24742474
"recovery": {
2475+
"change_recovery_confirm_button": "Confirm new recovery key",
2476+
"change_recovery_confirm_description": "Enter your new recovery key below to finish. Your old one will no longer work.",
2477+
"change_recovery_confirm_title": "Enter your new recovery key",
24752478
"change_recovery_key": "Change recovery key",
2476-
"change_recovery_key_description": "Get a new recovery key if you've lost your existing one. After changing your recovery key, your old one will no longer work.",
2479+
"change_recovery_key_description": "Write down this new recovery key somewhere safe. Then click Continue to confirm the change.",
24772480
"change_recovery_key_title": "Change recovery key?",
2478-
"confirm_description": "Enter the recovery key shown on the previous screen to finish setting up recovery.",
2479-
"confirm_finish": "Finish set up",
2480-
"confirm_title": "Enter your recovery key to confirm",
24812481
"description": "Recover your cryptographic identity and message history with a recovery key if you’ve lost all your existing devices.",
24822482
"enter_key_error": "The recovery key you entered is not correct.",
24832483
"enter_recovery_key": "Enter recovery key",
24842484
"key_storage_warning": "Your key storage is out of sync. Click the button below to fix the problem.",
24852485
"save_key_description": "Do not share this with anyone!",
24862486
"save_key_title": "Recovery key",
24872487
"set_up_recovery": "Set up recovery",
2488+
"set_up_recovery_confirm_button": "Finish set up",
2489+
"set_up_recovery_confirm_description": "Enter the recovery key shown on the previous screen to finish setting up recovery.",
2490+
"set_up_recovery_confirm_title": "Enter your recovery key to confirm",
24882491
"set_up_recovery_description": "Your key storage is protected by a recovery key. If you need a new recovery key after setup, you can recreate it by selecting ‘%(changeRecoveryKeyButton)s’.",
24892492
"set_up_recovery_save_key_description": "Write down this recovery key somewhere safe, like a password manager, encrypted note, or a physical safe.",
24902493
"set_up_recovery_save_key_title": "Save your recovery key somewhere safe",

test/unit-tests/components/views/settings/encryption/__snapshots__/ChangeRecoveryKey-test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ exports[`<ChangeRecoveryKey /> flow to change the recovery key should display th
8282
Change recovery key?
8383
</h2>
8484
<span>
85-
Get a new recovery key if you've lost your existing one. After changing your recovery key, your old one will no longer work.
85+
Write down this new recovery key somewhere safe. Then click Continue to confirm the change.
8686
</span>
8787
</div>
8888
<div

0 commit comments

Comments
 (0)