mirror of
https://github.com/bitwarden/browser.git
synced 2024-09-28 04:08:47 +02:00
2111b37c32
* create new user decryption options service * rename new service to user decryption options * add hasMasterPassword to user decryption options service * migrate device trust service to new user decryption options service * add migration for user-decryption-options * migrate sync service and calls to trust-device-service * rename abstraction file * migrate two factor component * migrate two factor spec * migrate sso component * migrate set-password component * migrate base login decryption component * migrate organization options component * fix component imports * add missing imports - remove state service calls - add update user decryption options method * remove acct decryption options from account * lint * fix tests and linting * fix browser * fix desktop * add user decryption options service to cli * remove default value from migration * bump migration number * fix merge conflict * fix vault timeout settings * fix cli * more fixes * add user decryption options service to deps of vault timeout settings service * update login strategy service with user decryption options * remove early return from sync bandaid for user decryption options * move user decryption options service to lib/auth * move user decryption options to libs/auth * fix reference * fix browser * check user decryption options after 2fa check * update migration and revert tsconfig changes * add more documentation * clear user decryption options on logout * fix tests by creating helper for user decryption options * fix tests * pr feedback * fix factory * update migration * add tests * update missed migration num in test
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import { KeyDefinitionLike, MigrationHelper } from "../migration-helper";
|
|
import { Migrator } from "../migrator";
|
|
|
|
type DecryptionOptionsType = {
|
|
hasMasterPassword: boolean;
|
|
trustedDeviceOption?: {
|
|
hasAdminApproval: boolean;
|
|
hasLoginApprovingDevice: boolean;
|
|
hasManageResetPasswordPermission: boolean;
|
|
};
|
|
keyConnectorOption?: {
|
|
keyConnectorUrl: string;
|
|
};
|
|
};
|
|
|
|
type ExpectedAccountType = {
|
|
decryptionOptions?: DecryptionOptionsType;
|
|
};
|
|
|
|
const USER_DECRYPTION_OPTIONS: KeyDefinitionLike = {
|
|
key: "decryptionOptions",
|
|
stateDefinition: {
|
|
name: "userDecryptionOptions",
|
|
},
|
|
};
|
|
|
|
export class UserDecryptionOptionsMigrator extends Migrator<43, 44> {
|
|
async migrate(helper: MigrationHelper): Promise<void> {
|
|
const accounts = await helper.getAccounts<ExpectedAccountType>();
|
|
async function migrateAccount(userId: string, account: ExpectedAccountType): Promise<void> {
|
|
const value = account?.decryptionOptions;
|
|
if (value != null) {
|
|
await helper.setToUser(userId, USER_DECRYPTION_OPTIONS, value);
|
|
delete account.decryptionOptions;
|
|
await helper.set(userId, account);
|
|
}
|
|
}
|
|
|
|
await Promise.all([...accounts.map(({ userId, account }) => migrateAccount(userId, account))]);
|
|
}
|
|
async rollback(helper: MigrationHelper): Promise<void> {
|
|
const accounts = await helper.getAccounts<ExpectedAccountType>();
|
|
async function rollbackAccount(userId: string, account: ExpectedAccountType): Promise<void> {
|
|
const value: DecryptionOptionsType = await helper.getFromUser(
|
|
userId,
|
|
USER_DECRYPTION_OPTIONS,
|
|
);
|
|
if (account) {
|
|
account.decryptionOptions = Object.assign(account.decryptionOptions, value);
|
|
await helper.set(userId, account);
|
|
}
|
|
await helper.setToUser(userId, USER_DECRYPTION_OPTIONS, null);
|
|
}
|
|
|
|
await Promise.all([...accounts.map(({ userId, account }) => rollbackAccount(userId, account))]);
|
|
}
|
|
}
|