Merge branch 'i2577-SeedPhraseBug' into i2577-SeedPhraseBug-Test

This commit is contained in:
Dan Finlay 2017-11-20 14:15:21 -08:00
commit d19aa016aa
2 changed files with 34 additions and 5 deletions

View File

@ -31,6 +31,7 @@ const ConfigManager = require('./lib/config-manager')
const nodeify = require('./lib/nodeify') const nodeify = require('./lib/nodeify')
const accountImporter = require('./account-import-strategies') const accountImporter = require('./account-import-strategies')
const getBuyEthUrl = require('./lib/buy-eth-url') const getBuyEthUrl = require('./lib/buy-eth-url')
const Mutex = require('await-semaphore').Mutex
const version = require('../manifest.json').version const version = require('../manifest.json').version
module.exports = class MetamaskController extends EventEmitter { module.exports = class MetamaskController extends EventEmitter {
@ -38,6 +39,7 @@ module.exports = class MetamaskController extends EventEmitter {
constructor (opts) { constructor (opts) {
super() super()
this.sendUpdate = debounce(this.privateSendUpdate.bind(this), 200) this.sendUpdate = debounce(this.privateSendUpdate.bind(this), 200)
this.opts = opts this.opts = opts
@ -49,6 +51,9 @@ module.exports = class MetamaskController extends EventEmitter {
// observable state store // observable state store
this.store = new ObservableStore(initState) this.store = new ObservableStore(initState)
// lock to ensure only one vault created at once
this.createVaultMutex = new Mutex()
// network store // network store
this.networkController = new NetworkController(initState.NetworkController) this.networkController = new NetworkController(initState.NetworkController)
@ -467,15 +472,34 @@ module.exports = class MetamaskController extends EventEmitter {
// Vault Management // Vault Management
// //
async createNewVaultAndKeychain (password, cb) { async createNewVaultAndKeychain (password) {
const vault = await this.keyringController.createNewVaultAndKeychain(password) const release = await this.createVaultMutex.acquire()
this.selectFirstIdentity(vault) let vault
try {
const accounts = await this.keyringController.getAccounts()
if (accounts.length > 0) {
vault = await this.keyringController.fullUpdate()
} else {
let vault = await this.keyringController.createNewVaultAndKeychain(password)
this.selectFirstIdentity(vault)
}
release()
} catch (err) {
release()
throw err
}
return vault return vault
} }
async createNewVaultAndRestore (password, seed, cb) { async createNewVaultAndRestore (password, seed) {
const release = await this.createVaultMutex.acquire()
const vault = await this.keyringController.createNewVaultAndRestore(password, seed) const vault = await this.keyringController.createNewVaultAndRestore(password, seed)
this.selectFirstIdentity(vault) this.selectFirstIdentity(vault)
release()
return vault return vault
} }

View File

@ -8,6 +8,8 @@ const actions = require('../actions')
const Tooltip = require('../components/tooltip') const Tooltip = require('../components/tooltip')
const getCaretCoordinates = require('textarea-caret') const getCaretCoordinates = require('textarea-caret')
let isSubmitting = false
module.exports = connect(mapStateToProps)(InitializeMenuScreen) module.exports = connect(mapStateToProps)(InitializeMenuScreen)
inherits(InitializeMenuScreen, Component) inherits(InitializeMenuScreen, Component)
@ -164,7 +166,10 @@ InitializeMenuScreen.prototype.createNewVaultAndKeychain = function () {
return return
} }
this.props.dispatch(actions.createNewVaultAndKeychain(password)) if (!isSubmitting) {
isSubmitting = true
this.props.dispatch(actions.createNewVaultAndKeychain(password))
}
} }
InitializeMenuScreen.prototype.inputChanged = function (event) { InitializeMenuScreen.prototype.inputChanged = function (event) {