From 363a93f46f9348c9a8fd68dca8458bf47ece3eee Mon Sep 17 00:00:00 2001 From: thecodrr Date: Wed, 15 Apr 2020 12:42:56 +0500 Subject: [PATCH] fix: notes locking/unlocking --- apps/web/src/common/vault.js | 35 +++++++++++++++++-------------- apps/web/src/interfaces/crypto.js | 14 ++++++------- apps/web/yarn.lock | 6 +++--- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/apps/web/src/common/vault.js b/apps/web/src/common/vault.js index 8ca159696..6676f8a6b 100644 --- a/apps/web/src/common/vault.js +++ b/apps/web/src/common/vault.js @@ -3,13 +3,13 @@ import { showPasswordDialog } from "../components/dialogs/passworddialog"; class Vault { static createVault() { - return showPasswordDialog("create_vault", password => + return showPasswordDialog("create_vault", (password) => db.vault.create(password) ); } static unlockVault() { - return showPasswordDialog("unlock_vault", password => { + return showPasswordDialog("unlock_vault", (password) => { return db.vault .unlock(password) .then(() => true) @@ -18,28 +18,31 @@ class Vault { } static unlockNote(id, done) { - showPasswordDialog("unlock_note", password => { + showPasswordDialog("unlock_note", (password) => { return db.vault .remove(id, password) .then(() => true) - .catch(e => { + .catch((e) => { if (e.message === "ERR_WRNG_PWD") return false; else console.error(e); }); - }).then(res => res && done()); + }).then((res) => res && done()); } static openNote(id) { - return showPasswordDialog("unlock_note", password => { - return db.vault - .open(id, password) - .then(note => { - return note.content; - }) - .catch(e => { - if (e.message === "ERR_WRNG_PwD") return; - else console.error(e); - }); + return new Promise((resolve) => { + showPasswordDialog("unlock_note", (password) => { + return db.vault + .open(id, password) + .then((note) => { + resolve(note.content); + return true; + }) + .catch((e) => { + if (e.message === "ERR_WRNG_PwD") return; + else console.error(e); + }); + }); }); } @@ -57,7 +60,7 @@ class Vault { return false; } }) - .then(result => result && Vault.lockNote(id)); + .then((result) => result && Vault.lockNote(id)); } } export default Vault; diff --git a/apps/web/src/interfaces/crypto.js b/apps/web/src/interfaces/crypto.js index ad91aec5f..bfb4ce6e9 100644 --- a/apps/web/src/interfaces/crypto.js +++ b/apps/web/src/interfaces/crypto.js @@ -38,14 +38,14 @@ class Crypto { }; _getKey = async (passwordOrKey) => { - let key, salt; - if (passwordOrKey.password) { - const result = await this.deriveKey(passwordOrKey.password); + let { salt, key, password } = passwordOrKey; + if (password) { + const result = await this.deriveKey(password, salt); key = result.key; salt = result.salt; - } else if (passwordOrKey.key && passwordOrKey.salt) { + } else if (key && salt) { salt = passwordOrKey.salt; - key = this.sodium.from_base64(passwordOrKey.key); + key = this.sodium.from_base64(key); } return { key, salt }; }; @@ -89,9 +89,9 @@ class Crypto { * @param {{password: string}|{key:string, salt: string}} passwordOrKey - password or derived key * @param {{salt: string, iv: string, cipher: string}} cipher - the cipher data */ - decrypt = async (passwordOrKey, { iv, cipher }) => { + decrypt = async (passwordOrKey, { iv, cipher, salt }) => { await this._initialize(); - const { key } = await this._getKey(passwordOrKey); + const { key } = await this._getKey({ salt, ...passwordOrKey }); const plainText = this.sodium.crypto_aead_xchacha20poly1305_ietf_decrypt( undefined, diff --git a/apps/web/yarn.lock b/apps/web/yarn.lock index 3d8a000ed..4073da950 100644 --- a/apps/web/yarn.lock +++ b/apps/web/yarn.lock @@ -7251,9 +7251,9 @@ normalize-url@^3.0.0, normalize-url@^3.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -"notes-core@git+ssh://git@github.com:thecodrr/notes-core.git": - version "1.2.0" - resolved "git+ssh://git@github.com:thecodrr/notes-core.git#61249bc5f6452c9490c1be77ba4b1b5489949400" +"notes-core@git+ssh://git@github.com:streetwriters/notesnook-core.git": + version "1.3.0" + resolved "git+ssh://git@github.com:streetwriters/notesnook-core.git#51209ca353908393e54e810382c940eb158849fc" dependencies: fast-sort "^2.0.1" fuzzysearch "^1.0.3"