aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorDan Finlay <dan@danfinlay.com>2016-12-01 11:34:17 +0800
committerDan Finlay <dan@danfinlay.com>2016-12-01 11:36:24 +0800
commit1880cda9b95f3274d56e1f4abc513d1d7ddd59c2 (patch)
tree5db1151d5b09c6f82a4a02a85ff3ae5fea8018dd /app
parent049e351c9d78dc13a81ba962b04ef96694b13682 (diff)
downloadtangerine-wallet-browser-1880cda9b95f3274d56e1f4abc513d1d7ddd59c2.tar
tangerine-wallet-browser-1880cda9b95f3274d56e1f4abc513d1d7ddd59c2.tar.gz
tangerine-wallet-browser-1880cda9b95f3274d56e1f4abc513d1d7ddd59c2.tar.bz2
tangerine-wallet-browser-1880cda9b95f3274d56e1f4abc513d1d7ddd59c2.tar.lz
tangerine-wallet-browser-1880cda9b95f3274d56e1f4abc513d1d7ddd59c2.tar.xz
tangerine-wallet-browser-1880cda9b95f3274d56e1f4abc513d1d7ddd59c2.tar.zst
tangerine-wallet-browser-1880cda9b95f3274d56e1f4abc513d1d7ddd59c2.zip
Fix vault encrypting & unlocking bug
This is only a bug in dev, but was committed yesterday. Sometimes the `encrypt` method was being passed values other than the password as the encryption key, leading to un-unlockable vaults. To find this, and avoid it for all time hereafter, I added several more steps to our oft-neglected integration test suite, which now fully initializes a vault, locks it, and unlocks it again, to make sure all of those steps definitely work always.
Diffstat (limited to 'app')
-rw-r--r--app/scripts/keyring-controller.js16
-rw-r--r--app/scripts/lib/config-manager.js5
2 files changed, 15 insertions, 6 deletions
diff --git a/app/scripts/keyring-controller.js b/app/scripts/keyring-controller.js
index ac9409dbb..9cfc3af97 100644
--- a/app/scripts/keyring-controller.js
+++ b/app/scripts/keyring-controller.js
@@ -167,7 +167,7 @@ module.exports = class KeyringController extends EventEmitter {
this.configManager.setSelectedAccount(hexAccount)
return this.setupAccounts(accounts)
})
- .then(this.persistAllKeyrings.bind(this))
+ .then(this.persistAllKeyrings.bind(this, password))
.then(this.fullUpdate.bind(this))
}
@@ -226,9 +226,11 @@ module.exports = class KeyringController extends EventEmitter {
})
.then((keyrings) => {
this.keyrings = keyrings
- return this.setupAccounts()
+ return this.fullUpdate()
+ })
+ .catch((reason) => {
+ return reason
})
- .then(this.fullUpdate.bind(this))
}
// Add New Keyring
@@ -250,6 +252,7 @@ module.exports = class KeyringController extends EventEmitter {
this.keyrings.push(keyring)
return this.setupAccounts(accounts)
})
+ .then(() => { return this.password })
.then(this.persistAllKeyrings.bind(this))
.then(() => {
return keyring
@@ -692,6 +695,9 @@ module.exports = class KeyringController extends EventEmitter {
// Takes an account address and an iterator representing
// the current number of named accounts.
getBalanceAndNickname (account) {
+ if (!account) {
+ throw new Error('Problem loading account.')
+ }
const address = normalize(account)
this.ethStore.addAccount(address)
return this.createNickname(address)
@@ -725,7 +731,9 @@ module.exports = class KeyringController extends EventEmitter {
// encrypts that array with the provided `password`,
// and persists that encrypted string to storage.
persistAllKeyrings (password = this.password) {
- this.password = password
+ if (typeof password === 'string') {
+ this.password = password
+ }
return Promise.all(this.keyrings.map((keyring) => {
return Promise.all([keyring.type, keyring.serialize()])
.then((serializedKeyringArray) => {
diff --git a/app/scripts/lib/config-manager.js b/app/scripts/lib/config-manager.js
index 8e63265d2..59cc2b63c 100644
--- a/app/scripts/lib/config-manager.js
+++ b/app/scripts/lib/config-manager.js
@@ -3,6 +3,7 @@ const MetamaskConfig = require('../config.js')
const migrations = require('./migrations')
const rp = require('request-promise')
const ethUtil = require('ethereumjs-util')
+const normalize = require('./sig-util').normalize
const TESTNET_RPC = MetamaskConfig.network.testnet
const MAINNET_RPC = MetamaskConfig.network.mainnet
@@ -273,13 +274,13 @@ ConfigManager.prototype.getWalletNicknames = function () {
}
ConfigManager.prototype.nicknameForWallet = function (account) {
- const address = ethUtil.addHexPrefix(account.toLowerCase())
+ const address = normalize(account)
const nicknames = this.getWalletNicknames()
return nicknames[address]
}
ConfigManager.prototype.setNicknameForWallet = function (account, nickname) {
- const address = ethUtil.addHexPrefix(account.toLowerCase())
+ const address = normalize(account)
const nicknames = this.getWalletNicknames()
nicknames[address] = nickname
var data = this.getData()