Skip to content

Commit 4bfe8e2

Browse files
committed
Use CryptoApi.getKeyBackupInfo instead of deprecated MatrixClient.getKeyBackupVersion
1 parent 6bc8080 commit 4bfe8e2

File tree

14 files changed

+32
-34
lines changed

14 files changed

+32
-34
lines changed

src/DeviceListener.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -229,12 +229,14 @@ export default class DeviceListener {
229229
private async getKeyBackupInfo(): Promise<KeyBackupInfo | null> {
230230
if (!this.client) return null;
231231
const now = new Date().getTime();
232+
const crypto = this.client.getCrypto();
232233
if (
233-
!this.keyBackupInfo ||
234-
!this.keyBackupFetchedAt ||
235-
this.keyBackupFetchedAt < now - KEY_BACKUP_POLL_INTERVAL
234+
crypto &&
235+
(!this.keyBackupInfo ||
236+
!this.keyBackupFetchedAt ||
237+
this.keyBackupFetchedAt < now - KEY_BACKUP_POLL_INTERVAL)
236238
) {
237-
this.keyBackupInfo = await this.client.getKeyBackupVersion();
239+
this.keyBackupInfo = await crypto.getKeyBackupInfo();
238240
this.keyBackupFetchedAt = now;
239241
}
240242
return this.keyBackupInfo;

src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
277277
if (!forceReset) {
278278
try {
279279
this.setState({ phase: Phase.Loading });
280-
backupInfo = await cli.getKeyBackupVersion();
280+
backupInfo = await crypto.getKeyBackupInfo();
281281
} catch (e) {
282282
logger.error("Error fetching backup data from server", e);
283283
this.setState({ phase: Phase.LoadError });

src/components/structures/MatrixChat.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1640,7 +1640,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
16401640
} else {
16411641
// otherwise check the server to see if there's a new one
16421642
try {
1643-
newVersionInfo = await cli.getKeyBackupVersion();
1643+
newVersionInfo = (await cli.getCrypto()?.getKeyBackupInfo()) || null;
16441644
if (newVersionInfo !== null) haveNewVersion = true;
16451645
} catch (e) {
16461646
logger.error("Saw key backup error but failed to check backup version!", e);

src/components/views/dialogs/LogoutDialog.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export default class LogoutDialog extends React.Component<IProps, IState> {
111111
}
112112

113113
// backup is not active. see if there is a backup version on the server we ought to back up to.
114-
const backupInfo = await client.getKeyBackupVersion();
114+
const backupInfo = await crypto.getKeyBackupInfo();
115115
this.setState({ backupStatus: backupInfo ? BackupStatus.SERVER_BACKUP_BUT_DISABLED : BackupStatus.NO_BACKUP });
116116
}
117117

src/components/views/dialogs/security/RestoreKeyBackupDialog.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent<IProps,
265265
});
266266
try {
267267
const cli = MatrixClientPeg.safeGet();
268-
const backupInfo = await cli.getKeyBackupVersion();
268+
const backupInfo = (await cli.getCrypto()?.getKeyBackupInfo()) || null;
269269
const has4S = await cli.secretStorage.hasKey();
270270
const backupKeyStored = has4S ? await cli.isKeyBackupKeyStored() : null;
271271
this.setState({

src/components/views/settings/SecureBackupPanel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ export default class SecureBackupPanel extends React.PureComponent<{}, IState> {
119119
this.getUpdatedDiagnostics();
120120
try {
121121
const cli = MatrixClientPeg.safeGet();
122-
const backupInfo = await cli.getKeyBackupVersion();
122+
const backupInfo = (await cli.getCrypto()?.getKeyBackupInfo()) || null;
123123
const backupTrustInfo = backupInfo ? await cli.getCrypto()?.isKeyBackupTrusted(backupInfo) : undefined;
124124

125125
const activeBackupVersion = (await cli.getCrypto()?.getActiveSessionBackupVersion()) ?? null;

src/stores/SetupEncryptionStore.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export class SetupEncryptionStore extends EventEmitter {
128128
this.emit("update");
129129
try {
130130
const cli = MatrixClientPeg.safeGet();
131-
const backupInfo = await cli.getKeyBackupVersion();
131+
const backupInfo = (await cli.getCrypto()?.getKeyBackupInfo()) || null;
132132
this.backupInfo = backupInfo;
133133
this.emit("update");
134134

test/test-utils/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ export const mockClientMethodsCrypto = (): Partial<
143143
> => ({
144144
isKeyBackupKeyStored: jest.fn(),
145145
getCrossSigningCacheCallbacks: jest.fn().mockReturnValue({ getCrossSigningKeyCache: jest.fn() }),
146-
getKeyBackupVersion: jest.fn().mockResolvedValue(null),
147146
secretStorage: { hasKey: jest.fn() },
148147
getCrypto: jest.fn().mockReturnValue({
149148
getUserDeviceInfo: jest.fn(),
@@ -162,6 +161,7 @@ export const mockClientMethodsCrypto = (): Partial<
162161
getVersion: jest.fn().mockReturnValue("Version 0"),
163162
getOwnDeviceKeys: jest.fn().mockReturnValue(new Promise(() => {})),
164163
getCrossSigningKeyId: jest.fn(),
164+
getKeyBackupInfo: jest.fn().mockResolvedValue(null),
165165
}),
166166
});
167167

test/test-utils/test-utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ export function createTestClient(): MatrixClient {
9999
getDevices: jest.fn().mockResolvedValue({ devices: [{ device_id: "ABCDEFGHI" }] }),
100100
getSessionId: jest.fn().mockReturnValue("iaszphgvfku"),
101101
credentials: { userId: "@userId:matrix.org" },
102-
getKeyBackupVersion: jest.fn(),
103102

104103
secretStorage: {
105104
get: jest.fn(),
@@ -131,6 +130,7 @@ export function createTestClient(): MatrixClient {
131130
createRecoveryKeyFromPassphrase: jest.fn().mockResolvedValue({}),
132131
bootstrapSecretStorage: jest.fn(),
133132
isDehydrationSupported: jest.fn().mockResolvedValue(false),
133+
getKeyBackupInfo: jest.fn().mockResolvedValue(null),
134134
}),
135135

136136
getPushActionsForEvent: jest.fn(),

test/unit-tests/DeviceListener-test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,12 @@ describe("DeviceListener", () => {
9595
},
9696
}),
9797
getSessionBackupPrivateKey: jest.fn(),
98+
getKeyBackupInfo: jest.fn().mockResolvedValue(null),
9899
} as unknown as Mocked<CryptoApi>;
99100
mockClient = getMockClientWithEventEmitter({
100101
isGuest: jest.fn(),
101102
getUserId: jest.fn().mockReturnValue(userId),
102103
getSafeUserId: jest.fn().mockReturnValue(userId),
103-
getKeyBackupVersion: jest.fn().mockResolvedValue(undefined),
104104
getRooms: jest.fn().mockReturnValue([]),
105105
isVersionSupported: jest.fn().mockResolvedValue(true),
106106
isInitialSyncComplete: jest.fn().mockReturnValue(true),
@@ -354,7 +354,7 @@ describe("DeviceListener", () => {
354354

355355
it("shows set up encryption toast when user has a key backup available", async () => {
356356
// non falsy response
357-
mockClient!.getKeyBackupVersion.mockResolvedValue({} as unknown as KeyBackupInfo);
357+
mockCrypto.getKeyBackupInfo.mockResolvedValue({} as unknown as KeyBackupInfo);
358358
await createAndStart();
359359

360360
expect(SetupEncryptionToast.showToast).toHaveBeenCalledWith(
@@ -673,7 +673,7 @@ describe("DeviceListener", () => {
673673
describe("When Room Key Backup is not enabled", () => {
674674
beforeEach(() => {
675675
// no backup
676-
mockClient.getKeyBackupVersion.mockResolvedValue(null);
676+
mockCrypto.getKeyBackupInfo.mockResolvedValue(null);
677677
});
678678

679679
it("Should report recovery state as Enabled", async () => {
@@ -722,7 +722,7 @@ describe("DeviceListener", () => {
722722
});
723723

724724
// no backup
725-
mockClient.getKeyBackupVersion.mockResolvedValue(null);
725+
mockCrypto.getKeyBackupInfo.mockResolvedValue(null);
726726

727727
await createAndStart();
728728

@@ -872,7 +872,7 @@ describe("DeviceListener", () => {
872872
describe("When Room Key Backup is enabled", () => {
873873
beforeEach(() => {
874874
// backup enabled - just need a mock object
875-
mockClient.getKeyBackupVersion.mockResolvedValue({} as KeyBackupInfo);
875+
mockCrypto.getKeyBackupInfo.mockResolvedValue({} as KeyBackupInfo);
876876
});
877877

878878
const testCases = [

test/unit-tests/components/views/dialogs/LogoutDialog-test.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ describe("LogoutDialog", () => {
2222
beforeEach(() => {
2323
mockClient = getMockClientWithEventEmitter({
2424
...mockClientMethodsCrypto(),
25-
getKeyBackupVersion: jest.fn(),
2625
});
2726

2827
mockCrypto = mocked(mockClient.getCrypto()!);
@@ -50,14 +49,14 @@ describe("LogoutDialog", () => {
5049
});
5150

5251
it("Prompts user to connect backup if there is a backup on the server", async () => {
53-
mockClient.getKeyBackupVersion.mockResolvedValue({} as KeyBackupInfo);
52+
mockCrypto.getKeyBackupInfo.mockResolvedValue({} as KeyBackupInfo);
5453
const rendered = renderComponent();
5554
await rendered.findByText("Connect this session to Key Backup");
5655
expect(rendered.container).toMatchSnapshot();
5756
});
5857

5958
it("Prompts user to set up backup if there is no backup on the server", async () => {
60-
mockClient.getKeyBackupVersion.mockResolvedValue(null);
59+
mockCrypto.getKeyBackupInfo.mockResolvedValue(null);
6160
const rendered = renderComponent();
6261
await rendered.findByText("Start using Key Backup");
6362
expect(rendered.container).toMatchSnapshot();
@@ -66,7 +65,7 @@ describe("LogoutDialog", () => {
6665
describe("when there is an error fetching backups", () => {
6766
filterConsole("Unable to fetch key backup status");
6867
it("prompts user to set up backup", async () => {
69-
mockClient.getKeyBackupVersion.mockImplementation(async () => {
68+
mockCrypto.getKeyBackupInfo.mockImplementation(async () => {
7069
throw new Error("beep");
7170
});
7271
const rendered = renderComponent();

test/unit-tests/components/views/dialogs/security/CreateSecretStorageDialog-test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ describe("CreateSecretStorageDialog", () => {
7777
filterConsole("Error fetching backup data from server");
7878

7979
it("shows an error", async () => {
80-
mockClient.getKeyBackupVersion.mockImplementation(async () => {
80+
jest.spyOn(mockClient.getCrypto()!, "getKeyBackupInfo").mockImplementation(async () => {
8181
throw new Error("bleh bleh");
8282
});
8383

@@ -92,7 +92,7 @@ describe("CreateSecretStorageDialog", () => {
9292
expect(result.container).toMatchSnapshot();
9393

9494
// Now we can get the backup and we retry
95-
mockClient.getKeyBackupVersion.mockRestore();
95+
jest.spyOn(mockClient.getCrypto()!, "getKeyBackupInfo").mockRestore();
9696
await userEvent.click(screen.getByRole("button", { name: "Retry" }));
9797
await screen.findByText("Your keys are now being backed up from this device.");
9898
});

test/unit-tests/components/views/settings/SecureBackupPanel-test.tsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,13 @@ describe("<SecureBackupPanel />", () => {
2828
const client = getMockClientWithEventEmitter({
2929
...mockClientMethodsUser(userId),
3030
...mockClientMethodsCrypto(),
31-
getKeyBackupVersion: jest.fn().mockReturnValue("1"),
3231
getClientWellKnown: jest.fn(),
3332
});
3433

3534
const getComponent = () => render(<SecureBackupPanel />);
3635

3736
beforeEach(() => {
38-
client.getKeyBackupVersion.mockResolvedValue({
37+
jest.spyOn(client.getCrypto()!, "getKeyBackupInfo").mockResolvedValue({
3938
version: "1",
4039
algorithm: "test",
4140
auth_data: {
@@ -52,7 +51,6 @@ describe("<SecureBackupPanel />", () => {
5251
});
5352

5453
mocked(client.secretStorage.hasKey).mockClear().mockResolvedValue(false);
55-
client.getKeyBackupVersion.mockClear();
5654

5755
mocked(accessSecretStorage).mockClear().mockResolvedValue();
5856
});
@@ -65,8 +63,8 @@ describe("<SecureBackupPanel />", () => {
6563
});
6664

6765
it("handles error fetching backup", async () => {
68-
// getKeyBackupVersion can fail for various reasons
69-
client.getKeyBackupVersion.mockImplementation(async () => {
66+
// getKeyBackupInfo can fail for various reasons
67+
jest.spyOn(client.getCrypto()!, "getKeyBackupInfo").mockImplementation(async () => {
7068
throw new Error("beep beep");
7169
});
7270
const renderResult = getComponent();
@@ -75,9 +73,9 @@ describe("<SecureBackupPanel />", () => {
7573
});
7674

7775
it("handles absence of backup", async () => {
78-
client.getKeyBackupVersion.mockResolvedValue(null);
76+
jest.spyOn(client.getCrypto()!, "getKeyBackupInfo").mockResolvedValue(null);
7977
getComponent();
80-
// flush getKeyBackupVersion promise
78+
// flush getKeyBackupInfo promise
8179
await flushPromises();
8280
expect(screen.getByText("Back up your keys before signing out to avoid losing them.")).toBeInTheDocument();
8381
});
@@ -120,7 +118,7 @@ describe("<SecureBackupPanel />", () => {
120118
});
121119

122120
it("deletes backup after confirmation", async () => {
123-
client.getKeyBackupVersion
121+
jest.spyOn(client.getCrypto()!, "getKeyBackupInfo")
124122
.mockResolvedValueOnce({
125123
version: "1",
126124
algorithm: "test",
@@ -157,7 +155,7 @@ describe("<SecureBackupPanel />", () => {
157155
// flush checkKeyBackup promise
158156
await flushPromises();
159157

160-
client.getKeyBackupVersion.mockClear();
158+
jest.spyOn(client.getCrypto()!, "getKeyBackupInfo").mockClear();
161159
mocked(client.getCrypto()!).isKeyBackupTrusted.mockClear();
162160

163161
fireEvent.click(screen.getByText("Reset"));
@@ -167,7 +165,7 @@ describe("<SecureBackupPanel />", () => {
167165
await flushPromises();
168166

169167
// backup status refreshed
170-
expect(client.getKeyBackupVersion).toHaveBeenCalled();
168+
expect(client.getCrypto()!.getKeyBackupInfo).toHaveBeenCalled();
171169
expect(client.getCrypto()!.isKeyBackupTrusted).toHaveBeenCalled();
172170
});
173171
});

test/unit-tests/components/views/settings/tabs/user/SecurityUserSettingsTab-test.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ describe("<SecurityUserSettingsTab />", () => {
3434
...mockClientMethodsCrypto(),
3535
getRooms: jest.fn().mockReturnValue([]),
3636
getIgnoredUsers: jest.fn(),
37-
getKeyBackupVersion: jest.fn(),
3837
});
3938

4039
const sdkContext = new SdkContextClass();

0 commit comments

Comments
 (0)