1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 17:33:23 +01:00

Fixed bugs related to clearing caches when restoring to a new vault

This commit is contained in:
Dan Finlay 2016-11-01 17:00:17 -07:00
parent 72729060dc
commit b5f6ef8c01
6 changed files with 54 additions and 13 deletions

View File

@ -9,6 +9,7 @@ const BN = ethUtil.BN
const Transaction = require('ethereumjs-tx') const Transaction = require('ethereumjs-tx')
const createId = require('web3-provider-engine/util/random-id') const createId = require('web3-provider-engine/util/random-id')
const autoFaucet = require('./lib/auto-faucet') const autoFaucet = require('./lib/auto-faucet')
const bip39 = require('bip39')
// TEMPORARY UNTIL FULL DEPRECATION: // TEMPORARY UNTIL FULL DEPRECATION:
const IdStoreMigrator = require('./lib/idStore-migrator') const IdStoreMigrator = require('./lib/idStore-migrator')
@ -46,6 +47,8 @@ module.exports = class KeyringController extends EventEmitter {
} }
getState() { getState() {
let address = this.configManager.getSelectedAccount()
return { return {
seedWords: this.configManager.getSeedWords(), seedWords: this.configManager.getSeedWords(),
isInitialized: !!this.configManager.getVault(), isInitialized: !!this.configManager.getVault(),
@ -55,7 +58,8 @@ module.exports = class KeyringController extends EventEmitter {
transactions: this.configManager.getTxList(), transactions: this.configManager.getTxList(),
unconfMsgs: messageManager.unconfirmedMsgs(), unconfMsgs: messageManager.unconfirmedMsgs(),
messages: messageManager.getMsgList(), messages: messageManager.getMsgList(),
selectedAddress: this.configManager.getSelectedAccount(), selectedAddress: address,
selectedAccount: address,
shapeShiftTxList: this.configManager.getShapeShiftTxList(), shapeShiftTxList: this.configManager.getShapeShiftTxList(),
currentFiat: this.configManager.getCurrentFiat(), currentFiat: this.configManager.getCurrentFiat(),
conversionRate: this.configManager.getConversionRate(), conversionRate: this.configManager.getConversionRate(),
@ -78,12 +82,33 @@ module.exports = class KeyringController extends EventEmitter {
} }
createNewVaultAndRestore(password, seed, cb) { createNewVaultAndRestore(password, seed, cb) {
if (typeof password !== 'string') {
return cb('Password must be text.')
}
if (!bip39.validateMnemonic(seed)) {
return cb('Seed phrase is invalid.')
}
this.clearKeyrings()
this.createNewVault(password, '', (err) => { this.createNewVault(password, '', (err) => {
if (err) return cb(err) if (err) return cb(err)
this.addNewKeyring('HD Key Tree', { this.addNewKeyring('HD Key Tree', {
mnemonic: seed, mnemonic: seed,
n: 1, n: 1,
}, cb) }, (err) => {
if (err) return cb(err)
const firstKeyring = this.keyrings[0]
const accounts = firstKeyring.getAccounts()
const firstAccount = accounts[0]
const hexAccount = ethUtil.addHexPrefix(firstAccount)
this.configManager.setSelectedAccount(hexAccount)
this.setupAccounts(accounts)
this.emit('update')
cb(null, this.getState())
})
}) })
} }
@ -138,6 +163,7 @@ module.exports = class KeyringController extends EventEmitter {
return this.unlockKeyrings(key) return this.unlockKeyrings(key)
}) })
.then(() => { .then(() => {
this.emit('update')
cb(null, this.getState()) cb(null, this.getState())
}) })
.catch((err) => { .catch((err) => {
@ -175,6 +201,7 @@ module.exports = class KeyringController extends EventEmitter {
const ring = this.keyrings[keyRingNum] const ring = this.keyrings[keyRingNum]
const accounts = ring.addAccounts(1) const accounts = ring.addAccounts(1)
this.setupAccounts(accounts) this.setupAccounts(accounts)
this.persistAllKeyrings()
cb(null, this.getState()) cb(null, this.getState())
} }
@ -468,10 +495,6 @@ module.exports = class KeyringController extends EventEmitter {
cb(null, '0xPrivateKey') cb(null, '0xPrivateKey')
} }
tryPassword(password, cb) {
cb()
}
getNetwork(err) { getNetwork(err) {
if (err) { if (err) {
this.network = 'loading' this.network = 'loading'
@ -503,6 +526,22 @@ module.exports = class KeyringController extends EventEmitter {
cb(null, this.configManager.getSelectedAccount()) cb(null, this.configManager.getSelectedAccount())
} }
clearKeyrings() {
let accounts
try {
accounts = Object.keys(this.ethStore._currentState.accounts)
} catch (e) {
accounts = []
}
accounts.forEach((address) => {
this.ethStore.removeAccount(address)
})
this.keyrings = []
this.identities = {}
this.configManager.setSelectedAccount()
}
} }
function noop () {} function noop () {}

View File

@ -13,7 +13,7 @@ module.exports = class HdKeyring extends EventEmitter {
return type return type
} }
constructor(opts) { constructor(opts = {}) {
super() super()
this.type = type this.type = type
this.opts = opts || {} this.opts = opts || {}

View File

@ -38,8 +38,8 @@ module.exports = class MetamaskController {
return extend( return extend(
this.state, this.state,
this.ethStore.getState(), this.ethStore.getState(),
this.keyringController.getState(), this.configManager.getConfig(),
this.configManager.getConfig() this.keyringController.getState()
) )
} }
@ -73,7 +73,6 @@ module.exports = class MetamaskController {
setLocked: keyringController.setLocked.bind(keyringController), setLocked: keyringController.setLocked.bind(keyringController),
exportAccount: keyringController.exportAccount.bind(keyringController), exportAccount: keyringController.exportAccount.bind(keyringController),
saveAccountLabel: keyringController.saveAccountLabel.bind(keyringController), saveAccountLabel: keyringController.saveAccountLabel.bind(keyringController),
tryPassword: keyringController.tryPassword.bind(keyringController),
// coinbase // coinbase
buyEth: this.buyEth.bind(this), buyEth: this.buyEth.bind(this),
// shapeshift // shapeshift

View File

@ -161,7 +161,7 @@ function tryUnlockMetamask (password) {
background.submitPassword(password, (err, newState) => { background.submitPassword(password, (err, newState) => {
dispatch(actions.hideLoadingIndication()) dispatch(actions.hideLoadingIndication())
if (err) { if (err) {
dispatch(actions.unlockFailed()) dispatch(actions.unlockFailed(err.message))
} else { } else {
dispatch(this.updateMetamaskState(newState)) dispatch(this.updateMetamaskState(newState))
let selectedAccount let selectedAccount
@ -407,9 +407,10 @@ function unlockInProgress () {
} }
} }
function unlockFailed () { function unlockFailed (message) {
return { return {
type: actions.UNLOCK_FAILED, type: actions.UNLOCK_FAILED,
value: message,
} }
} }

View File

@ -335,7 +335,7 @@ function reduceApp (state, action) {
case actions.UNLOCK_FAILED: case actions.UNLOCK_FAILED:
return extend(appState, { return extend(appState, {
warning: 'Incorrect password. Try again.', warning: action.value || 'Incorrect password. Try again.',
}) })
case actions.SHOW_LOADING: case actions.SHOW_LOADING:

View File

@ -55,6 +55,8 @@ UnlockScreen.prototype.render = function () {
h('.error', { h('.error', {
style: { style: {
display: warning ? 'block' : 'none', display: warning ? 'block' : 'none',
padding: '0 20px',
textAlign: 'center',
}, },
}, warning), }, warning),