1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-19 01:33:33 +00:00

Add StateVersion.Three to fix premium migration (#666)

* Add StateVersion.Three to fix premium migration
This commit is contained in:
Thomas Rittson
2022-02-11 13:40:13 +10:00
committed by GitHub
parent 52f77c0277
commit 5fad7c666f
3 changed files with 48 additions and 13 deletions

View File

@@ -24,6 +24,8 @@ import { GlobalStateFactory } from "../factories/globalStateFactory";
import { StateFactory } from "../factories/stateFactory";
import { Account, AccountSettings } from "../models/domain/account";
import { TokenService } from "./token.service";
// Originally (before January 2022) storage was handled as a flat key/value pair store.
// With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration.
const v1Keys: { [key: string]: string } = {
@@ -153,6 +155,9 @@ export class StateMigrationService<
case StateVersion.One:
await this.migrateStateFrom1To2();
break;
case StateVersion.Two:
await this.migrateStateFrom2To3();
break;
}
currentStateVersion += 1;
@@ -448,6 +453,27 @@ export class StateMigrationService<
}
}
protected async migrateStateFrom2To3(): Promise<void> {
const authenticatedUserIds = await this.get<string[]>(keys.authenticatedAccounts);
await Promise.all(
authenticatedUserIds.map(async (userId) => {
const account = await this.get<TAccount>(userId);
if (
account?.profile?.hasPremiumPersonally === null &&
account.tokens?.accessToken != null
) {
const decodedToken = await TokenService.decodeToken(account.tokens.accessToken);
account.profile.hasPremiumPersonally = decodedToken.premium;
await this.set(userId, account);
}
})
);
const globals = await this.getGlobals();
globals.stateVersion = StateVersion.Three;
await this.set(keys.global, globals);
}
protected get options(): StorageOptions {
return { htmlStorageLocation: HtmlStorageLocation.Local };
}