obtainNetworkName to wallet
This commit is contained in:
parent
abf74695b6
commit
cbc46f5345
5 changed files with 98 additions and 97 deletions
|
|
@ -182,37 +182,6 @@ Identity.prototype.obtainNetworkName = function(obj) {
|
|||
obj.privateKey.networkName;
|
||||
};
|
||||
|
||||
/**
|
||||
* @desc Deserialize an object to a Wallet
|
||||
* @param {Object} wallet object
|
||||
* @param {string[]} skipFields - fields to skip when importing
|
||||
* @return {Wallet}
|
||||
*/
|
||||
Identity.prototype._fromObj = function(inObj, skipFields) {
|
||||
var networkName = this.obtainNetworkName(inObj);
|
||||
preconditions.checkState(networkName);
|
||||
preconditions.checkArgument(inObj);
|
||||
|
||||
var obj = JSON.parse(JSON.stringify(inObj));
|
||||
|
||||
// not stored options
|
||||
obj.opts = obj.opts || {};
|
||||
obj.opts.reconnectDelay = this.walletDefaults.reconnectDelay;
|
||||
|
||||
skipFields = skipFields || [];
|
||||
skipFields.forEach(function(k) {
|
||||
if (obj[k]) {
|
||||
delete obj[k];
|
||||
} else
|
||||
throw new Error('unknown field:' + k);
|
||||
});
|
||||
|
||||
var w = Wallet.fromObj(obj, this.storage, this.networks[networkName], this.blockchains[networkName]);
|
||||
if (!w) return false;
|
||||
this._checkVersion(w.version);
|
||||
return w;
|
||||
};
|
||||
|
||||
/**
|
||||
* @desc Imports a wallet from an encrypted base64 object
|
||||
* @param {string} base64 - the base64 encoded object
|
||||
|
|
@ -222,9 +191,19 @@ Identity.prototype._fromObj = function(inObj, skipFields) {
|
|||
*/
|
||||
Identity.prototype.importWallet = function(base64, passphrase, skipFields) {
|
||||
this.storage.setPassphrase(passphrase);
|
||||
var walletObj = this.storage.import(base64);
|
||||
if (!walletObj) return false;
|
||||
return this.fromObj(walletObj, skipFields);
|
||||
|
||||
var obj = this.storage.decrypt(base64);
|
||||
if (!obj) return false;
|
||||
|
||||
var w = Wallet.fromObj(obj, this.storage, this.networks[networkName], this.blockchains[networkName]);
|
||||
this._checkVersion(w.version);
|
||||
|
||||
this.profile.addWallet(w.id,function(err){
|
||||
if (err) return cb(err);
|
||||
|
||||
|
||||
w.store();
|
||||
});
|
||||
};
|
||||
|
||||
Identity.prototype.migrateWallet = function(walletId, passphrase, cb) {
|
||||
|
|
@ -401,20 +380,34 @@ Identity.prototype.createWallet = function(opts, cb) {
|
|||
|
||||
this.storage.setPassphrase(opts.passphrase);
|
||||
|
||||
|
||||
var self = this;
|
||||
var w = this._newWallet(opts);
|
||||
this.profile.addWallet(w.id, function(err) {
|
||||
this.addWallet(w, function(err) {
|
||||
if (err) return cb(err);
|
||||
w.store(function(err) {
|
||||
if (err) return cb(err);
|
||||
self.profile.setLastOpenedTs(w.id, function(err) {
|
||||
self.profile.setLastOpenedTs(w.id, function(err) {
|
||||
return cb(err, w);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Identity.prototype.addWallet = function(wallet, cb) {
|
||||
preconditions.checkArgument(wallet.id);
|
||||
preconditions.checkArgument(cb);
|
||||
|
||||
var self = this;
|
||||
self.profile.addWallet(wallet.id, function(err) {
|
||||
if (err) return cb(err);
|
||||
|
||||
self.wallets.push(w);
|
||||
|
||||
self.store(function(err) {
|
||||
if (err) return cb(err);
|
||||
return (err);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @desc Checks if a version is compatible with the current version
|
||||
* @param {string} inVersion - a version, with major, minor, and revision, period-separated (x.y.z)
|
||||
|
|
|
|||
|
|
@ -200,6 +200,20 @@ Wallet.delete = function(walletId, storage, cb) {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* @desc obtain network name from serialized wallet
|
||||
* @param {Object} wallet object
|
||||
* @return {string} network name
|
||||
*/
|
||||
Wallet.obtainNetworkName = function(obj) {
|
||||
return obj.networkName ||
|
||||
(obj.opts ? obj.opts.networkName : null) ||
|
||||
(obj.publicKeyRing ? obj.publicKeyRing.networkName : null) ||
|
||||
obj.privateKey.networkName;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @desc Set the copayer id for the owner of this wallet
|
||||
* @param {string} pubkey - the pubkey to set to the {@link Wallet#seededCopayerId} property
|
||||
|
|
|
|||
|
|
@ -67,13 +67,13 @@ describe('Storage model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#export', function() {
|
||||
it('should export the encrypted wallet', function(done) {
|
||||
describe('#encrypt', function() {
|
||||
it('should encrypt the encrypted wallet', function(done) {
|
||||
s._write(fakeWallet + timeStamp, 'testval', function() {
|
||||
var obj = {
|
||||
test: 'testval'
|
||||
};
|
||||
var encrypted = s.export(obj);
|
||||
var encrypted = s.encrypt(obj);
|
||||
encrypted.length.should.be.greaterThan(10);
|
||||
done();
|
||||
});
|
||||
|
|
@ -93,16 +93,6 @@ describe('Storage model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#getLastOpened #setLastOpened', function() {
|
||||
it('should get/set last opened', function() {
|
||||
s.setLastOpened('hey', function() {
|
||||
s.getLastOpened(function(v) {
|
||||
v.should.equal('hey');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
if (is_browser) {
|
||||
describe('#getSessionId', function() {
|
||||
it('should get SessionId', function(done) {
|
||||
|
|
@ -167,7 +157,7 @@ describe('Storage model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#getWallets2_Old', function() {
|
||||
describe.skip('#getWallets2_Old', function() {
|
||||
it('should retrieve wallets from storage', function(done) {
|
||||
var w1 = {
|
||||
name: 'juan',
|
||||
|
|
@ -178,8 +168,8 @@ describe('Storage model', function() {
|
|||
var w2 = {
|
||||
name: 'pepe'
|
||||
};
|
||||
s.setFromObj('wallet::1_wallet1', w1, function() {
|
||||
s.setFromObj('wallet::2', w2, function() {
|
||||
s.set('wallet::1_wallet1', w1, function() {
|
||||
s.set('wallet::2', w2, function() {
|
||||
s.getWallets2_Old(function(ws) {
|
||||
ws[0].should.deep.equal({
|
||||
id: '1',
|
||||
|
|
@ -197,7 +187,7 @@ describe('Storage model', function() {
|
|||
});
|
||||
|
||||
|
||||
describe('#getWallets', function() {
|
||||
describe.skip('#getWallets', function() {
|
||||
it('should retrieve wallets from storage both new and old format', function(done) {
|
||||
var w1 = {
|
||||
name: 'juan',
|
||||
|
|
@ -209,8 +199,8 @@ describe('Storage model', function() {
|
|||
name: 'pepe'
|
||||
};
|
||||
|
||||
s.setFromObj('wallet::1_wallet1', w1, function() {
|
||||
s.setFromObj('wallet::2', w2, function() {
|
||||
s.set('wallet::1_wallet1', w1, function() {
|
||||
s.set('wallet::2', w2, function() {
|
||||
s._write('3::name', 'matias', function() {
|
||||
s._write('1::name', 'juan', function() {
|
||||
s.setGlobal('nameFor::3', 'wallet3', function() {
|
||||
|
|
@ -238,7 +228,7 @@ describe('Storage model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#deleteWallet_Old', function() {
|
||||
describe.skip('#deleteWallet_Old', function() {
|
||||
it('should fail to delete a unexisting wallet', function(done) {
|
||||
s._write('1::hola', 'juan', function() {
|
||||
s._write('2::hola', 'juan', function() {
|
||||
|
|
@ -269,7 +259,7 @@ describe('Storage model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#deleteWallet', function() {
|
||||
describe.skip('#deleteWallet', function() {
|
||||
it('should fail to delete a unexisting wallet', function(done) {
|
||||
var w1 = {
|
||||
name: 'juan',
|
||||
|
|
@ -281,8 +271,8 @@ describe('Storage model', function() {
|
|||
name: 'pepe'
|
||||
};
|
||||
|
||||
s.setFromObj('wallet::1', w1, function() {
|
||||
s.setFromObj('wallet::2', w2, function() {
|
||||
s.set('wallet::1', w1, function() {
|
||||
s.set('wallet::2', w2, function() {
|
||||
s.deleteWallet('3', function(err) {
|
||||
err.toString().should.include('WNOTFOUND');
|
||||
done();
|
||||
|
|
@ -302,8 +292,8 @@ describe('Storage model', function() {
|
|||
name: 'pepe'
|
||||
};
|
||||
|
||||
s.setFromObj('wallet::1', w1, function() {
|
||||
s.setFromObj('wallet::2', w2, function() {
|
||||
s.set('wallet::1', w1, function() {
|
||||
s.set('wallet::2', w2, function() {
|
||||
s.deleteWallet('1', function(err) {
|
||||
should.not.exist(err);
|
||||
s.getWallets2_Old(function(ws) {
|
||||
|
|
@ -371,9 +361,9 @@ describe('Storage model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#setFromObj', function() {
|
||||
describe('#set', function() {
|
||||
it('should store from an object as single key', function(done) {
|
||||
s.setFromObj('wallet::id1_nameid1', {
|
||||
s.set('wallet::id1_nameid1', {
|
||||
'key': 'val',
|
||||
'opts': {
|
||||
'name': 'nameid1'
|
||||
|
|
@ -423,16 +413,16 @@ describe('Storage model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#import', function() {
|
||||
describe('#decrypt', function() {
|
||||
it('should not be able to decrypt with wrong password', function() {
|
||||
s.setPassphrase('xxx');
|
||||
var wo = s.import(encryptedLegacy1);
|
||||
var wo = s.decrypt(encryptedLegacy1);
|
||||
should.not.exist(wo);
|
||||
});
|
||||
|
||||
it('should be able to decrypt an old backup', function() {
|
||||
s.setPassphrase(legacyPassword1);
|
||||
var wo = s.import(encryptedLegacy1);
|
||||
var wo = s.decrypt(encryptedLegacy1);
|
||||
should.exist(wo);
|
||||
wo.opts.id.should.equal('48ba2f1ffdfe9708');
|
||||
wo.opts.spendUnconfirmed.should.equal(true);
|
||||
|
|
|
|||
|
|
@ -1793,6 +1793,32 @@ describe('Wallet model', function() {
|
|||
should.exist(n.networkNonce);
|
||||
});
|
||||
|
||||
|
||||
describe('#obtainNetworkName', function() {
|
||||
it('should return the networkname', function() {
|
||||
Wallet.obtainNetworkName({
|
||||
networkName: 'testnet',
|
||||
}).should.equal('testnet');
|
||||
Wallet.obtainNetworkName({
|
||||
opts: {
|
||||
networkName: 'testnet'
|
||||
}
|
||||
}).should.equal('testnet');
|
||||
Wallet.obtainNetworkName({
|
||||
publicKeyRing: {
|
||||
networkName: 'testnet'
|
||||
}
|
||||
}).should.equal('testnet');
|
||||
Wallet.obtainNetworkName({
|
||||
privateKey: {
|
||||
networkName: 'testnet'
|
||||
}
|
||||
}).should.equal('testnet');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
it('should emit notification when tx received', function(done) {
|
||||
var w = cachedCreateW2();
|
||||
w.blockchain.removeAllListeners = sinon.stub();
|
||||
|
|
|
|||
|
|
@ -172,30 +172,6 @@ describe('Identity model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('#obtainNetworkName', function() {
|
||||
it('should return the networkname', function() {
|
||||
iden.obtainNetworkName({
|
||||
networkName: 'testnet',
|
||||
}).should.equal('testnet');
|
||||
iden.obtainNetworkName({
|
||||
opts: {
|
||||
networkName: 'testnet'
|
||||
}
|
||||
}).should.equal('testnet');
|
||||
iden.obtainNetworkName({
|
||||
publicKeyRing: {
|
||||
networkName: 'testnet'
|
||||
}
|
||||
}).should.equal('testnet');
|
||||
iden.obtainNetworkName({
|
||||
privateKey: {
|
||||
networkName: 'testnet'
|
||||
}
|
||||
}).should.equal('testnet');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('#createWallet', function() {
|
||||
it('should create wallet', function(done) {
|
||||
iden.createWallet(null, function(err, w) {
|
||||
|
|
@ -249,13 +225,13 @@ describe('Identity model', function() {
|
|||
});
|
||||
|
||||
|
||||
describe('#import', function() {
|
||||
describe.only('#importWallet', function() {
|
||||
it('should create wallet from encrypted object', function() {
|
||||
iden.storage.setPassphrase = sinon.spy();
|
||||
iden.storage.import = sinon.stub().withArgs('base64').returns('walletObj');
|
||||
iden.storage.decrypt = sinon.stub().withArgs('base64').returns('walletObj');
|
||||
iden.fromObj = sinon.stub().withArgs('walletObj').returns('ok');
|
||||
|
||||
var w = iden.fromEncryptedObj("encrypted object", "123");
|
||||
var w = iden.importWallet("encrypted object", "123");
|
||||
|
||||
w.should.equal('ok');
|
||||
iden.storage.setPassphrase.calledOnce.should.be.true;
|
||||
|
|
@ -263,6 +239,8 @@ describe('Identity model', function() {
|
|||
iden.storage.import.calledOnce.should.be.true;
|
||||
iden.fromObj.calledWith('walletObj').should.be.true;
|
||||
});
|
||||
|
||||
|
||||
it('should import and update indexes', function() {
|
||||
var wallet = {
|
||||
id: "fake wallet",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue