From 7d806b03b37da83311a02b49cf3b4607d0684ebd Mon Sep 17 00:00:00 2001 From: Bruno Windels <274386+bwindels@users.noreply.github.com> Date: Fri, 3 Mar 2023 11:33:19 +0100 Subject: [PATCH] mark all existing user identities outdated as cross-signing keys missing --- src/matrix/storage/idb/schema.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/matrix/storage/idb/schema.ts b/src/matrix/storage/idb/schema.ts index c8d260cd..ce825edb 100644 --- a/src/matrix/storage/idb/schema.ts +++ b/src/matrix/storage/idb/schema.ts @@ -13,6 +13,7 @@ import {encodeScopeTypeKey} from "./stores/OperationStore"; import {MAX_UNICODE} from "./stores/common"; import {ILogItem} from "../../../logging/types"; +import type {UserIdentity} from "../../e2ee/DeviceTracker"; export type MigrationFunc = (db: IDBDatabase, txn: IDBTransaction, localStorage: IDOMStorage, log: ILogItem) => Promise | void; // FUNCTIONS SHOULD ONLY BE APPENDED!! @@ -35,7 +36,7 @@ export const schema: MigrationFunc[] = [ addInboundSessionBackupIndex, migrateBackupStatus, createCallStore, - createCrossSigningKeyStoreAndRenameDeviceIdentities + applyCrossSigningChanges ]; // TODO: how to deal with git merge conflicts of this array? @@ -277,10 +278,16 @@ function createCallStore(db: IDBDatabase) : void { db.createObjectStore("calls", {keyPath: "key"}); } -//v18 create calls store and rename deviceIdentities to deviceKeys -function createCrossSigningKeyStoreAndRenameDeviceIdentities(db: IDBDatabase) : void { +//v18 add crossSigningKeys store, rename deviceIdentities to deviceKeys and empties userIdentities +async function applyCrossSigningChanges(db: IDBDatabase, txn: IDBTransaction) : Promise { db.createObjectStore("crossSigningKeys", {keyPath: "key"}); db.deleteObjectStore("deviceIdentities"); const deviceKeys = db.createObjectStore("deviceKeys", {keyPath: "key"}); deviceKeys.createIndex("byCurve25519Key", "curve25519Key", {unique: true}); + // mark all userIdentities as outdated as cross-signing keys won't be stored + const userIdentities = txn.objectStore("userIdentities"); + await iterateCursor(userIdentities.openCursor(), (value, key, cursor) => { + value.deviceTrackingStatus = 0 // outdated; + return NOT_DONE; + }); }