From 363c2a0939aba5fa73e08ff8e6d65581031242d5 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Mon, 12 Sep 2016 11:07:25 -0700 Subject: Fix account unlocking SubmitPassword was not creating a new id-management This is because I broke up the old "createIdmgmt" method to not perform as much conditional logic. Now the pieces are reusable and do what they should do. --- app/scripts/lib/id-management.js | 8 ++++++++ app/scripts/lib/idStore.js | 23 +++++++++++++---------- test/unit/idStore-test.js | 31 ++++++++++++------------------- 3 files changed, 33 insertions(+), 29 deletions(-) diff --git a/app/scripts/lib/id-management.js b/app/scripts/lib/id-management.js index 9b8ceb415..e250943a0 100644 --- a/app/scripts/lib/id-management.js +++ b/app/scripts/lib/id-management.js @@ -1,3 +1,11 @@ +/* ID Management + * + * This module exists to hold the decrypted credentials for the current session. + * It therefore exposes sign methods, because it is able to perform these + * with noa dditional authentication, because its very instantiation + * means the vault is unlocked. + */ + const ethUtil = require('ethereumjs-util') const Transaction = require('ethereumjs-tx') diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js index 8b7e3ad3b..1126b83e7 100644 --- a/app/scripts/lib/idStore.js +++ b/app/scripts/lib/idStore.js @@ -51,7 +51,7 @@ IdentityStore.prototype.createNewVault = function (password, entropy, cb) { this.configManager.setData({}) } - this._createIdmgmt(password, null, entropy, (err) => { + this._createVault(password, null, entropy, (err) => { if (err) return cb(err) this._autoFaucet() @@ -72,7 +72,7 @@ IdentityStore.prototype.recoverSeed = function (cb) { } IdentityStore.prototype.recoverFromSeed = function (password, seed, cb) { - this._createIdmgmt(password, seed, null, (err) => { + this._createVault(password, seed, null, (err) => { if (err) return cb(err) this._loadIdentities() @@ -449,11 +449,12 @@ IdentityStore.prototype.tryPassword = function (password, cb) { const isCorrect = keyStore.isDerivedKeyCorrect(pwDerivedKey) if (!isCorrect) return cb(new Error('Lightwallet - password incorrect')) + this._createIdMgmt(derivedKey) cb() }) } -IdentityStore.prototype._createIdmgmt = function (password, seedPhrase, entropy, cb) { +IdentityStore.prototype._createVault = function (password, seedPhrase, entropy, cb) { const opts = { password, hdPathString: this.hdPathString, @@ -476,13 +477,7 @@ IdentityStore.prototype._createIdmgmt = function (password, seedPhrase, entropy, keyStore.addHdDerivationPath(this.hdPathString, derivedKey, {curve: 'secp256k1', purpose: 'sign'}) this._createFirstWallet(derivedKey) - - this._idmgmt = new IdManagement({ - keyStore: keyStore, - derivedKey: derivedKey, - configManager: this.configManager, - }) - + this._createIdMgmt(derivedKey) this.setSelectedAddressSync() cb() @@ -490,6 +485,14 @@ IdentityStore.prototype._createIdmgmt = function (password, seedPhrase, entropy, }) } +IdentityStore.prototype._createIdMgmt = function (derivedKey) { + this._idmgmt = new IdManagement({ + keyStore: this.keyStore, + derivedKey: derivedKey, + configManager: this.configManager, + }) +} + IdentityStore.prototype.purgeCache = function () { this._getAddresses().forEach((address) => { this._ethStore.del(address) diff --git a/test/unit/idStore-test.js b/test/unit/idStore-test.js index 1ed1bf9a7..ac416e5cd 100644 --- a/test/unit/idStore-test.js +++ b/test/unit/idStore-test.js @@ -109,6 +109,7 @@ describe('IdentityStore', function() { }) it('should enforce seed compliance with TestRPC', function (done) { + this.timeout(5000) const tests = assertions.map((assertion) => { return function (cb) { accounts = [] @@ -118,7 +119,17 @@ describe('IdentityStore', function() { var received = accounts[0].toLowerCase() var expected = assertion.account.toLowerCase() assert.equal(received, expected) - cb() + + idStore.tryPassword(password, function (err) { + + assert.ok(idStore.isUnlocked(), 'should unlock the id store') + + idStore.submitPassword(password, function(err, account) { + assert.ifError(err) + assert.equal(account, expected) + cb() + }) + }) }) } }) @@ -128,23 +139,5 @@ describe('IdentityStore', function() { done() }) }) - - it('should allow restoring and unlocking again', function (done) { - const assertion = assertions[0] - idStore.recoverFromSeed(password, assertion.seed, (err) => { - assert.ifError(err) - - var received = accounts[0].toLowerCase() - var expected = assertion.account.toLowerCase() - assert.equal(received, expected) - - - idStore.submitPassword(password, function(err, account) { - assert.ifError(err) - assert.equal(account, expected) - done() - }) - }) - }) }) }) -- cgit v1.2.3