1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

add vault recovery

This commit is contained in:
kumavis 2016-03-15 13:39:12 -07:00
parent 231d7ab1de
commit 2197750510
2 changed files with 21 additions and 5 deletions

View File

@ -115,6 +115,7 @@ function linkDnode(stream){
setRpcTarget: setRpcTarget, setRpcTarget: setRpcTarget,
// forward directly to idStore // forward directly to idStore
createNewVault: idStore.createNewVault.bind(idStore), createNewVault: idStore.createNewVault.bind(idStore),
recoverFromSeed: idStore.recoverFromSeed.bind(idStore),
submitPassword: idStore.submitPassword.bind(idStore), submitPassword: idStore.submitPassword.bind(idStore),
setSelectedAddress: idStore.setSelectedAddress.bind(idStore), setSelectedAddress: idStore.setSelectedAddress.bind(idStore),
approveTransaction: idStore.approveTransaction.bind(idStore), approveTransaction: idStore.approveTransaction.bind(idStore),

View File

@ -41,7 +41,7 @@ IdentityStore.prototype.createNewVault = function(password, cb){
const self = this const self = this
delete self._keyStore delete self._keyStore
delete window.localStorage['lightwallet'] delete window.localStorage['lightwallet']
var keyStore = self._createIdmgmt(password, function(err){ var keyStore = self._createIdmgmt(password, null, function(err){
if (err) return cb(err) if (err) return cb(err)
var seedWords = self._idmgmt.getSeed() var seedWords = self._idmgmt.getSeed()
self._loadIdentities() self._loadIdentities()
@ -50,6 +50,15 @@ IdentityStore.prototype.createNewVault = function(password, cb){
}) })
} }
IdentityStore.prototype.recoverFromSeed = function(password, seed, cb){
const self = this
self._createIdmgmt(password, seed, function(err){
if (err) return cb(err)
self._loadIdentities()
self._didUpdate()
cb()
})
}
IdentityStore.prototype.setStore = function(store){ IdentityStore.prototype.setStore = function(store){
const self = this const self = this
@ -202,17 +211,23 @@ IdentityStore.prototype._loadIdentities = function(){
IdentityStore.prototype._tryPassword = function(password, cb){ IdentityStore.prototype._tryPassword = function(password, cb){
const self = this const self = this
self._createIdmgmt(password, cb) self._createIdmgmt(password, null, cb)
} }
IdentityStore.prototype._createIdmgmt = function(password, cb){ IdentityStore.prototype._createIdmgmt = function(password, seed, cb){
const self = this const self = this
var keyStore = null var keyStore = null
LightwalletKeyStore.deriveKeyFromPassword(password, function(err, derrivedKey){ LightwalletKeyStore.deriveKeyFromPassword(password, function(err, derrivedKey){
if (err) return cb(err) if (err) return cb(err)
var serializedKeystore = window.localStorage['lightwallet'] var serializedKeystore = window.localStorage['lightwallet']
// returning user // recovering from seed
if (serializedKeystore) { if (seed) {
keyStore = new LightwalletKeyStore(seed, derrivedKey)
keyStore.generateNewAddress(derrivedKey, 3)
window.localStorage['lightwallet'] = keyStore.serialize()
console.log('saved to keystore localStorage')
// returning user, recovering from localStorage
} else if (serializedKeystore) {
keyStore = LightwalletKeyStore.deserialize(serializedKeystore) keyStore = LightwalletKeyStore.deserialize(serializedKeystore)
var isCorrect = keyStore.isDerivedKeyCorrect(derrivedKey) var isCorrect = keyStore.isDerivedKeyCorrect(derrivedKey)
if (!isCorrect) return cb(new Error('Lightwallet - password incorrect')) if (!isCorrect) return cb(new Error('Lightwallet - password incorrect'))