Skip to content

Commit

Permalink
Add CryptoApi.getBackupInfo (#4512)
Browse files Browse the repository at this point in the history
* Add `CryptoApi.getBackupInfo`

* improve doc
  • Loading branch information
florianduros authored Nov 18, 2024
1 parent 325dace commit 781c3b0
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 1 deletion.
8 changes: 8 additions & 0 deletions spec/unit/crypto/backup.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -780,4 +780,12 @@ describe("MegolmBackup", function () {
client.stopClient();
});
});

describe("getKeyBackupInfo", () => {
it("should return throw an `Not implemented`", async () => {
const client = makeTestClient(cryptoStore);
await client.initCrypto();
await expect(client.getCrypto()?.getKeyBackupInfo()).rejects.toThrow("Not implemented");
});
});
});
14 changes: 14 additions & 0 deletions spec/unit/rust-crypto/rust-crypto.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1526,6 +1526,20 @@ describe("RustCrypto", () => {
failures: 1,
});
});

describe("getKeyBackupInfo", () => {
it("should return the current key backup info", async () => {
fetchMock.get("path:/_matrix/client/v3/room_keys/version", testData.SIGNED_BACKUP_DATA);

const rustCrypto = await makeTestRustCrypto(makeMatrixHttpApi());
await expect(rustCrypto.getKeyBackupInfo()).resolves.toStrictEqual(testData.SIGNED_BACKUP_DATA);
});

it("should return null if not available", async () => {
const rustCrypto = await makeTestRustCrypto(makeMatrixHttpApi());
await expect(rustCrypto.getKeyBackupInfo()).resolves.toBeNull();
});
});
});

describe("device dehydration", () => {
Expand Down
2 changes: 1 addition & 1 deletion src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3359,7 +3359,7 @@ export class MatrixClient extends TypedEventEmitter<EmittedEvents, ClientEventHa
*
* @returns Information object from API, or null if no backup is present on the server.
*
* @deprecated Prefer {@link CryptoApi.getActiveSessionBackupVersion}.
* @deprecated Prefer {@link CryptoApi.getKeyBackupInfo}.
*/
public async getKeyBackupVersion(): Promise<IKeyBackupInfo | null> {
let res: IKeyBackupInfo;
Expand Down
12 changes: 12 additions & 0 deletions src/crypto-api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,18 @@ export interface CryptoApi {
*/
isKeyBackupTrusted(info: KeyBackupInfo): Promise<BackupTrustInfo>;

/**
* Return the details of the latest backup on the server, when we last checked.
*
* This normally returns a cached value, but if we haven't yet made a request to the server, it will fire one off.
* It will always return the details of the active backup if key backup is enabled.
*
* Return null if there is no backup.
*
* @returns the key backup information
*/
getKeyBackupInfo(): Promise<KeyBackupInfo | null>;

/**
* Force a re-check of the key backup and enable/disable it as appropriate.
*
Expand Down
7 changes: 7 additions & 0 deletions src/crypto/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1327,6 +1327,13 @@ export class Crypto extends TypedEventEmitter<CryptoEvent, CryptoEventHandlerMap
return null;
}

/**
* Implementation of {@link Crypto.CryptoApi#getKeyBackupInfo}.
*/
public async getKeyBackupInfo(): Promise<KeyBackupInfo | null> {
throw new Error("Not implemented");
}

/**
* Determine if a key backup can be trusted.
*
Expand Down
7 changes: 7 additions & 0 deletions src/rust-crypto/rust-crypto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1233,6 +1233,13 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, CryptoEventH
return await this.backupManager.getActiveBackupVersion();
}

/**
* Implementation of {@link CryptoApi#getKeyBackupInfo}.
*/
public async getKeyBackupInfo(): Promise<KeyBackupInfo | null> {
return (await this.backupManager.getServerBackupInfo()) || null;
}

/**
* Determine if a key backup can be trusted.
*
Expand Down

0 comments on commit 781c3b0

Please sign in to comment.