Fix migrated state service data (#8815)

State service held data in an encrypted pair, with potentially both
encrypted and decrypted values. We want the encrypted form for these
disk migrations (decrypted would always be empty on disk anyways).
This commit is contained in:
Matt Gibson 2024-04-19 05:41:46 -04:00 committed by GitHub
parent 40ba15c07e
commit b26c9df056
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 13 deletions

View File

@ -26,6 +26,7 @@ function exampleJSON() {
}, },
}, },
ciphers: { ciphers: {
encrypted: {
"cipher-id-10": { "cipher-id-10": {
id: "cipher-id-10", id: "cipher-id-10",
}, },
@ -35,6 +36,7 @@ function exampleJSON() {
}, },
}, },
}, },
},
user2: { user2: {
data: { data: {
otherStuff: "otherStuff5", otherStuff: "otherStuff5",
@ -150,6 +152,7 @@ describe("CipherServiceMigrator", () => {
}, },
}, },
ciphers: { ciphers: {
encrypted: {
"cipher-id-10": { "cipher-id-10": {
id: "cipher-id-10", id: "cipher-id-10",
}, },
@ -158,6 +161,7 @@ describe("CipherServiceMigrator", () => {
}, },
}, },
}, },
},
}); });
}); });

View File

@ -4,7 +4,9 @@ import { Migrator } from "../migrator";
type ExpectedAccountType = { type ExpectedAccountType = {
data: { data: {
localData?: unknown; localData?: unknown;
ciphers?: unknown; ciphers?: {
encrypted: unknown;
};
}; };
}; };
@ -37,7 +39,7 @@ export class CipherServiceMigrator extends Migrator<56, 57> {
} }
//Migrate ciphers //Migrate ciphers
const ciphers = account?.data?.ciphers; const ciphers = account?.data?.ciphers?.encrypted;
if (ciphers != null) { if (ciphers != null) {
await helper.setToUser(userId, CIPHERS_DISK, ciphers); await helper.setToUser(userId, CIPHERS_DISK, ciphers);
delete account.data.ciphers; delete account.data.ciphers;
@ -68,7 +70,8 @@ export class CipherServiceMigrator extends Migrator<56, 57> {
const ciphers = await helper.getFromUser(userId, CIPHERS_DISK); const ciphers = await helper.getFromUser(userId, CIPHERS_DISK);
if (account.data && ciphers != null) { if (account.data && ciphers != null) {
account.data.ciphers = ciphers; account.data.ciphers ||= { encrypted: null };
account.data.ciphers.encrypted = ciphers;
await helper.set(userId, account); await helper.set(userId, account);
} }
await helper.setToUser(userId, CIPHERS_DISK, null); await helper.setToUser(userId, CIPHERS_DISK, null);