From 371090828dcabe1118f998bbbdef2f7f05019feb Mon Sep 17 00:00:00 2001 From: Hubert Chathi Date: Fri, 4 Feb 2022 13:24:22 -0500 Subject: [PATCH 1/3] back up keys before logging out --- src/client.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/client.ts b/src/client.ts index acf9accd302..cbe8a4425ed 100644 --- a/src/client.ts +++ b/src/client.ts @@ -6881,7 +6881,17 @@ export class MatrixClient extends EventEmitter { * @param {module:client.callback} callback Optional. * @return {Promise} Resolves: On success, the empty object */ - public logout(callback?: Callback): Promise<{}> { + public async logout(callback?: Callback): Promise<{}> { + if (this.crypto && this.crypto.backupManager) { + try { + while (await this.crypto.backupManager.backupPendingKeys(200) > 0); + } catch (err) { + logger.log( + "Key backup request failed when logging out. Some keys may be missing from backup", + err, + ); + } + } return this.http.authedRequest( callback, Method.Post, '/logout', ); From 9e2ddd599b650ca0620e378b90b001d92d6e5c30 Mon Sep 17 00:00:00 2001 From: Hubert Chathi Date: Tue, 8 Feb 2022 16:00:14 -0500 Subject: [PATCH 2/3] make function public, and only upload keys if backup enabled --- src/client.ts | 2 +- src/crypto/backup.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client.ts b/src/client.ts index cbe8a4425ed..7b412f5f7f3 100644 --- a/src/client.ts +++ b/src/client.ts @@ -6882,7 +6882,7 @@ export class MatrixClient extends EventEmitter { * @return {Promise} Resolves: On success, the empty object */ public async logout(callback?: Callback): Promise<{}> { - if (this.crypto && this.crypto.backupManager) { + if (this.crypto?.backupManager?.getKeyBackupEnabled()) { try { while (await this.crypto.backupManager.backupPendingKeys(200) > 0); } catch (err) { diff --git a/src/crypto/backup.ts b/src/crypto/backup.ts index 5c19d166ffb..a057de32db7 100644 --- a/src/crypto/backup.ts +++ b/src/crypto/backup.ts @@ -467,7 +467,7 @@ export class BackupManager { * @param {integer} limit Maximum number of keys to back up * @returns {integer} Number of sessions backed up */ - private async backupPendingKeys(limit: number): Promise { + public async backupPendingKeys(limit: number): Promise { const sessions = await this.baseApis.crypto.cryptoStore.getSessionsNeedingBackup(limit); if (!sessions.length) { return 0; From 40ba03006687c8b64a865170bdf735a685a13d58 Mon Sep 17 00:00:00 2001 From: Hubert Chathi Date: Tue, 8 Feb 2022 16:16:51 -0500 Subject: [PATCH 3/3] log as an error --- src/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client.ts b/src/client.ts index 7b412f5f7f3..3ebc0740f98 100644 --- a/src/client.ts +++ b/src/client.ts @@ -6886,7 +6886,7 @@ export class MatrixClient extends EventEmitter { try { while (await this.crypto.backupManager.backupPendingKeys(200) > 0); } catch (err) { - logger.log( + logger.error( "Key backup request failed when logging out. Some keys may be missing from backup", err, );