mirror of
https://github.com/bitwarden/browser
synced 2025-12-22 11:13:46 +00:00
* fix: broken SDK interface * Fix all compile errors related to uuids * Update usages of sdk to type-safe SDK type * Update sdk version * Update to "toSdk" * Move pin service to km ownership * Run format * Eslint * Fix tsconfig * Fix imports and test * Clean up imports * Pin tmp * Initial version of updated pin service * Add tests * Rename function * Clean up logging * Fix imports * Fix cli build * Fix browser desktop * Fix tests * Attempt to fix * Fix build * Fix tests * Fix browser build * Add missing empty line * Fix linting * Remove non-required change * Missing newline * Re-add comment * Undo change to file * Fix missing empty line * Cleanup * Cleanup * Cleanup * Cleanup * Switch to replaysubject * Add comments * Fix tests * Run prettier * Undo change * Fix browser * Fix circular dependency on browser * Add missing clear ephemeral pin * Address feedback * Update docs * Simplify sdk usage in pin service * Replace with mock sdk * Update sdk * Initialize pin service via unlock instead of listening to keyservice * Cleanup * Fix test * Prevent race condition with userkey not being set * Filter null userkeys * [PM-24124] Pin State Service (#16641) * add pin-state.service * add remaining tests * improve description for clearEphemeralPinState * rename getUserKeyWrappedPin$ to userKeyWrappedPin$ * drop temp variable in setPinState * add new test and remove copied one * Fix dep cycle * Fix tests and remaining build issues * Fix cli build * Add comments about functions not being public API --------- Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com> Co-authored-by: Hinton <hinton@users.noreply.github.com> Co-authored-by: Jake Fink <jfink@bitwarden.com>
79 lines
3.2 KiB
TypeScript
79 lines
3.2 KiB
TypeScript
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
|
import { KeyGenerationService } from "@bitwarden/common/key-management/crypto";
|
|
import { CryptoFunctionService } from "@bitwarden/common/key-management/crypto/abstractions/crypto-function.service";
|
|
import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
|
|
import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction";
|
|
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
|
|
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
|
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
|
|
import { KeySuffixOptions } from "@bitwarden/common/platform/enums";
|
|
import { StateProvider } from "@bitwarden/common/platform/state";
|
|
import { UserId } from "@bitwarden/common/types/guid";
|
|
import { UserKey } from "@bitwarden/common/types/key";
|
|
import {
|
|
KdfConfigService,
|
|
DefaultKeyService,
|
|
BiometricStateService,
|
|
} from "@bitwarden/key-management";
|
|
|
|
import { DesktopBiometricsService } from "./biometrics/desktop.biometrics.service";
|
|
|
|
// TODO Remove this class once biometric client key half storage is moved https://bitwarden.atlassian.net/browse/PM-22342
|
|
export class ElectronKeyService extends DefaultKeyService {
|
|
constructor(
|
|
masterPasswordService: InternalMasterPasswordServiceAbstraction,
|
|
keyGenerationService: KeyGenerationService,
|
|
cryptoFunctionService: CryptoFunctionService,
|
|
encryptService: EncryptService,
|
|
platformUtilsService: PlatformUtilsService,
|
|
logService: LogService,
|
|
stateService: StateService,
|
|
accountService: AccountService,
|
|
stateProvider: StateProvider,
|
|
private biometricStateService: BiometricStateService,
|
|
kdfConfigService: KdfConfigService,
|
|
private biometricService: DesktopBiometricsService,
|
|
) {
|
|
super(
|
|
masterPasswordService,
|
|
keyGenerationService,
|
|
cryptoFunctionService,
|
|
encryptService,
|
|
platformUtilsService,
|
|
logService,
|
|
stateService,
|
|
accountService,
|
|
stateProvider,
|
|
kdfConfigService,
|
|
);
|
|
}
|
|
|
|
protected override async storeAdditionalKeys(key: UserKey, userId: UserId) {
|
|
await super.storeAdditionalKeys(key, userId);
|
|
|
|
if (await this.biometricStateService.getBiometricUnlockEnabled(userId)) {
|
|
await this.storeBiometricsProtectedUserKey(key, userId);
|
|
}
|
|
}
|
|
|
|
protected override async getKeyFromStorage(
|
|
keySuffix: KeySuffixOptions,
|
|
userId: UserId,
|
|
): Promise<UserKey | null> {
|
|
return await super.getKeyFromStorage(keySuffix, userId);
|
|
}
|
|
|
|
private async storeBiometricsProtectedUserKey(userKey: UserKey, userId: UserId): Promise<void> {
|
|
await this.biometricService.setBiometricProtectedUnlockKeyForUser(userId, userKey);
|
|
}
|
|
|
|
protected async shouldStoreKey(keySuffix: KeySuffixOptions, userId: UserId): Promise<boolean> {
|
|
return await super.shouldStoreKey(keySuffix, userId);
|
|
}
|
|
|
|
protected override async clearAllStoredUserKeys(userId: UserId): Promise<void> {
|
|
await this.biometricService.deleteBiometricUnlockKeyForUser(userId);
|
|
await super.clearAllStoredUserKeys(userId);
|
|
}
|
|
}
|