mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-25 12:15:18 +01:00
Ps/pm-8197/clean-up-desktop-biometric-ipc (#9275)
* Do not process reload on account switch * Validate specified key against specified user * Grab userId immediately for user key retrieval
This commit is contained in:
parent
ac47cca944
commit
f2d24e036b
@ -411,7 +411,8 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||||||
this.masterPasswordService.forceSetPasswordReason$(message.userId),
|
this.masterPasswordService.forceSetPasswordReason$(message.userId),
|
||||||
)) != ForceSetPasswordReason.None;
|
)) != ForceSetPasswordReason.None;
|
||||||
if (locked) {
|
if (locked) {
|
||||||
this.messagingService.send("locked", { userId: message.userId });
|
this.modalService.closeAll();
|
||||||
|
await this.router.navigate(["lock"]);
|
||||||
} else if (forcedPasswordReset) {
|
} else if (forcedPasswordReset) {
|
||||||
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
|
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
|
||||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||||
|
@ -174,7 +174,7 @@ export class CryptoService implements CryptoServiceAbstraction {
|
|||||||
userId ??= await firstValueFrom(this.stateProvider.activeUserId$);
|
userId ??= await firstValueFrom(this.stateProvider.activeUserId$);
|
||||||
masterKey ??= await firstValueFrom(this.masterPasswordService.masterKey$(userId));
|
masterKey ??= await firstValueFrom(this.masterPasswordService.masterKey$(userId));
|
||||||
|
|
||||||
return await this.validateUserKey(masterKey as unknown as UserKey);
|
return await this.validateUserKey(masterKey as unknown as UserKey, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: legacy support for user key is no longer needed since we require users to migrate on login
|
// TODO: legacy support for user key is no longer needed since we require users to migrate on login
|
||||||
@ -193,9 +193,10 @@ export class CryptoService implements CryptoServiceAbstraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getUserKeyFromStorage(keySuffix: KeySuffixOptions, userId?: UserId): Promise<UserKey> {
|
async getUserKeyFromStorage(keySuffix: KeySuffixOptions, userId?: UserId): Promise<UserKey> {
|
||||||
|
userId ??= await firstValueFrom(this.stateProvider.activeUserId$);
|
||||||
const userKey = await this.getKeyFromStorage(keySuffix, userId);
|
const userKey = await this.getKeyFromStorage(keySuffix, userId);
|
||||||
if (userKey) {
|
if (userKey) {
|
||||||
if (!(await this.validateUserKey(userKey))) {
|
if (!(await this.validateUserKey(userKey, userId))) {
|
||||||
this.logService.warning("Invalid key, throwing away stored keys");
|
this.logService.warning("Invalid key, throwing away stored keys");
|
||||||
await this.clearAllStoredUserKeys(userId);
|
await this.clearAllStoredUserKeys(userId);
|
||||||
}
|
}
|
||||||
@ -663,13 +664,15 @@ export class CryptoService implements CryptoServiceAbstraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---HELPERS---
|
// ---HELPERS---
|
||||||
protected async validateUserKey(key: UserKey): Promise<boolean> {
|
protected async validateUserKey(key: UserKey, userId: UserId): Promise<boolean> {
|
||||||
if (!key) {
|
if (!key) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const encPrivateKey = await firstValueFrom(this.activeUserEncryptedPrivateKeyState.state$);
|
const encPrivateKey = await firstValueFrom(
|
||||||
|
this.stateProvider.getUserState$(USER_ENCRYPTED_PRIVATE_KEY, userId),
|
||||||
|
);
|
||||||
if (encPrivateKey == null) {
|
if (encPrivateKey == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user