Browse Source

Fix/lowdb no cache (#443)

* Add jslib prettier commit to client ignore hashes

* Remove lowdb caching

* Fix state service remove being set to null

* Await in-memory key retrieval

* Fix key loading and unlock requests.

* Linter fixes

* linter fixes

* linter fixes
pull/2722/head^2
Matt Gibson 4 years ago committed by GitHub
parent
commit
3b1ccb409e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      .git-blame-ignore-revs
  2. 2
      src/bw.ts
  3. 54
      src/program.ts
  4. 6
      src/services/nodeEnvSecureStorage.service.ts

3
.git-blame-ignore-revs

@ -1,2 +1,5 @@ @@ -1,2 +1,5 @@
# Apply Prettier https://github.com/bitwarden/cli/pull/426
910b4a24e649f21acbf4da5b2d422b121d514bd5
# jslib Apply Prettier https://github.com/bitwarden/jslib/pull/581
193434461dbd9c48fe5dcbad95693470aec422ac

2
src/bw.ts

@ -120,7 +120,7 @@ export class Main { @@ -120,7 +120,7 @@ export class Main {
(level) => process.env.BITWARDENCLI_DEBUG !== "true" && level <= LogLevelType.Info
);
this.cryptoFunctionService = new NodeCryptoFunctionService();
this.storageService = new LowdbStorageService(this.logService, null, p, true);
this.storageService = new LowdbStorageService(this.logService, null, p, false);
this.secureStorageService = new NodeEnvSecureStorageService(
this.storageService,
this.logService,

54
src/program.ts

@ -25,6 +25,8 @@ import { CliUtils } from "./utils"; @@ -25,6 +25,8 @@ import { CliUtils } from "./utils";
import { BaseProgram } from "jslib-node/cli/baseProgram";
import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions";
const writeLn = CliUtils.writeLn;
export class Program extends BaseProgram {
@ -473,36 +475,34 @@ export class Program extends BaseProgram { @@ -473,36 +475,34 @@ export class Program extends BaseProgram {
protected async exitIfLocked() {
await this.exitIfNotAuthed();
const hasKey = await this.main.cryptoService.hasKey();
if (!hasKey) {
const canInteract = process.env.BW_NOINTERACTION !== "true";
if (canInteract) {
const usesKeyConnector = await this.main.keyConnectorService.getUsesKeyConnector();
if (usesKeyConnector) {
const response = Response.error(
"Your vault is locked. You must unlock your vault using your session key.\n" +
"If you do not have your session key, you can get a new one by logging out and logging in again."
);
if (await this.main.cryptoService.hasKeyInMemory()) {
return;
} else if (await this.main.cryptoService.hasKeyStored(KeySuffixOptions.Auto)) {
// load key into memory
await this.main.cryptoService.getKey();
} else if (process.env.BW_NOINTERACTION !== "true") {
// must unlock
if (await this.main.keyConnectorService.getUsesKeyConnector()) {
const response = Response.error(
"Your vault is locked. You must unlock your vault using your session key.\n" +
"If you do not have your session key, you can get a new one by logging out and logging in again."
);
this.processResponse(response, true);
} else {
const command = new UnlockCommand(
this.main.cryptoService,
this.main.stateService,
this.main.cryptoFunctionService,
this.main.apiService,
this.main.logService
);
const response = await command.run(null, null);
if (!response.success) {
this.processResponse(response, true);
} else {
const command = new UnlockCommand(
this.main.cryptoService,
this.main.stateService,
this.main.cryptoFunctionService,
this.main.apiService,
this.main.logService
);
const response = await command.run(null, null);
if (!response.success) {
this.processResponse(response, true);
}
}
} else {
this.processResponse(Response.error("Vault is locked."), true);
}
} else if (!this.main.cryptoService.hasKeyInMemory()) {
await this.main.cryptoService.getKey();
} else {
this.processResponse(Response.error("Vault is locked."), true);
}
}
}

6
src/services/nodeEnvSecureStorage.service.ts

@ -26,7 +26,11 @@ export class NodeEnvSecureStorageService implements StorageService { @@ -26,7 +26,11 @@ export class NodeEnvSecureStorageService implements StorageService {
}
async save(key: string, obj: any): Promise<any> {
if (typeof obj !== "string") {
if (obj == null) {
return this.remove(key);
}
if (obj !== null && typeof obj !== "string") {
throw new Error("Only string storage is allowed.");
}
const protectedObj = await this.encrypt(obj);

Loading…
Cancel
Save