1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-12 06:13:38 +00:00

fix cli crypto service calls

This commit is contained in:
Jacob Fink
2023-06-20 11:49:54 -04:00
parent 690e9ffc4a
commit d16f76524c
5 changed files with 36 additions and 10 deletions

View File

@@ -334,7 +334,7 @@ export class Main {
); );
const lockedCallback = async () => const lockedCallback = async () =>
await this.cryptoService.clearStoredKey(KeySuffixOptions.Auto); await this.cryptoService.clearStoredUserKey(KeySuffixOptions.Auto);
this.vaultTimeoutSettingsService = new VaultTimeoutSettingsService( this.vaultTimeoutSettingsService = new VaultTimeoutSettingsService(
this.cryptoService, this.cryptoService,

View File

@@ -421,11 +421,14 @@ export class ServeCommand {
this.processResponse(res, Response.error("You are not logged in.")); this.processResponse(res, Response.error("You are not logged in."));
return true; return true;
} }
if (await this.main.cryptoService.hasKeyInMemory()) { if (await this.main.cryptoService.hasUserKeyInMemory()) {
return false; return false;
} else if (await this.main.cryptoService.hasKeyStored(KeySuffixOptions.Auto)) { } else if (await this.main.cryptoService.hasUserKeyStored(KeySuffixOptions.Auto)) {
// load key into memory // load key into memory
await this.main.cryptoService.getKey(); const userAutoKey = await this.main.cryptoService.getUserKeyFromStorage(
KeySuffixOptions.Auto
);
await this.main.cryptoService.setUserKey(userAutoKey);
return false; return false;
} }
this.processResponse(res, Response.error("Vault is locked.")); this.processResponse(res, Response.error("Vault is locked."));

View File

@@ -597,11 +597,14 @@ export class Program {
protected async exitIfLocked() { protected async exitIfLocked() {
await this.exitIfNotAuthed(); await this.exitIfNotAuthed();
if (await this.main.cryptoService.hasKeyInMemory()) { if (await this.main.cryptoService.hasUserKeyInMemory()) {
return; return;
} else if (await this.main.cryptoService.hasKeyStored(KeySuffixOptions.Auto)) { } else if (await this.main.cryptoService.hasUserKeyStored(KeySuffixOptions.Auto)) {
// load key into memory // load key into memory
await this.main.cryptoService.getKey(); const userAutoKey = await this.main.cryptoService.getUserKeyFromStorage(
KeySuffixOptions.Auto
);
await this.main.cryptoService.setUserKey(userAutoKey);
} else if (process.env.BW_NOINTERACTION !== "true") { } else if (process.env.BW_NOINTERACTION !== "true") {
// must unlock // must unlock
if (await this.main.keyConnectorService.getUsesKeyConnector()) { if (await this.main.keyConnectorService.getUsesKeyConnector()) {

View File

@@ -82,6 +82,12 @@ export abstract class CryptoService {
* @param userId The desired user * @param userId The desired user
*/ */
clearUserKey: (clearSecretStorage?: boolean, userId?: string) => Promise<void>; clearUserKey: (clearSecretStorage?: boolean, userId?: string) => Promise<void>;
/**
* Clears the user's stored version of the user symmetric key
* @param keySuffix The desired version of the key to clear
* @param userId The desired user
*/
clearStoredUserKey: (keySuffix: KeySuffixOptions, userId?: string) => Promise<void>;
/** /**
* Stores the master key encrypted user symmetric key * Stores the master key encrypted user symmetric key
* @param userSymKeyMasterKey The master key encrypted user symmetric key to set * @param userSymKeyMasterKey The master key encrypted user symmetric key to set

View File

@@ -76,7 +76,7 @@ export class CryptoService implements CryptoServiceAbstraction {
if (userKey != null) { if (userKey != null) {
if (!(await this.validateUserKey(userKey))) { if (!(await this.validateUserKey(userKey))) {
this.logService.warning("Wrong key, throwing away stored key"); this.logService.warning("Wrong key, throwing away stored key");
await this.clearStoredUserKeys(userId); await this.clearAllStoredUserKeys(userId);
return null; return null;
} }
@@ -121,7 +121,21 @@ export class CryptoService implements CryptoServiceAbstraction {
async clearUserKey(clearStoredKeys = true, userId?: string): Promise<void> { async clearUserKey(clearStoredKeys = true, userId?: string): Promise<void> {
await this.stateService.setUserSymKey(null, { userId: userId }); await this.stateService.setUserSymKey(null, { userId: userId });
if (clearStoredKeys) { if (clearStoredKeys) {
await this.clearStoredUserKeys(userId); await this.clearAllStoredUserKeys(userId);
}
}
async clearStoredUserKey(keySuffix: KeySuffixOptions, userId?: string): Promise<void> {
switch (keySuffix) {
case KeySuffixOptions.Auto:
this.stateService.setUserSymKeyAuto(null, { userId: userId });
break;
case KeySuffixOptions.Biometric:
this.stateService.setUserSymKeyBiometric(null, { userId: userId });
break;
case KeySuffixOptions.Pin:
this.stateService.setUserSymKeyPinEphemeral(null, { userId: userId });
break;
} }
} }
@@ -813,7 +827,7 @@ export class CryptoService implements CryptoServiceAbstraction {
return [new SymmetricCryptoKey(newSymKey) as T, protectedSymKey]; return [new SymmetricCryptoKey(newSymKey) as T, protectedSymKey];
} }
private async clearStoredUserKeys(userId?: string): Promise<void> { private async clearAllStoredUserKeys(userId?: string): Promise<void> {
await this.stateService.setUserSymKeyAuto(null, { userId: userId }); await this.stateService.setUserSymKeyAuto(null, { userId: userId });
await this.stateService.setUserSymKeyBiometric(null, { userId: userId }); await this.stateService.setUserSymKeyBiometric(null, { userId: userId });
await this.stateService.setUserSymKeyPinEphemeral(null, { userId: userId }); await this.stateService.setUserSymKeyPinEphemeral(null, { userId: userId });