add custom data to copayers

This commit is contained in:
Ivan Socolsky 2015-08-25 16:12:47 -03:00
parent cffde9de82
commit 6cba8abc5c
3 changed files with 31 additions and 12 deletions

View File

@ -48,6 +48,8 @@ Copayer.create = function(opts) {
copayerIndex: opts.copayerIndex copayerIndex: opts.copayerIndex
}); });
x.customData = opts.customData;
return x; return x;
}; };
@ -73,6 +75,8 @@ Copayer.fromObj = function(obj) {
} }
x.addressManager = AddressManager.fromObj(obj.addressManager); x.addressManager = AddressManager.fromObj(obj.addressManager);
x.customData = obj.customData;
return x; return x;
}; };

View File

@ -291,8 +291,12 @@ WalletService.prototype.getStatus = function(opts, cb) {
if (err) return next(err); if (err) return next(err);
var walletExtendedKeys = ['publicKeyRing', 'pubKey', 'addressManager']; var walletExtendedKeys = ['publicKeyRing', 'pubKey', 'addressManager'];
var copayerExtendedKeys = ['xPubKey', 'requestPubKey', 'signature', 'addressManager']; var copayerExtendedKeys = ['xPubKey', 'requestPubKey', 'signature', 'addressManager', 'customData'];
wallet.copayers = _.map(wallet.copayers, function(copayer) {
if (copayer.id == self.copayerId) return copayer;
return _.omit(copayer, 'customData');
});
if (!opts.includeExtendedInfo) { if (!opts.includeExtendedInfo) {
wallet = _.omit(wallet, walletExtendedKeys); wallet = _.omit(wallet, walletExtendedKeys);
wallet.copayers = _.map(wallet.copayers, function(copayer) { wallet.copayers = _.map(wallet.copayers, function(copayer) {
@ -406,8 +410,8 @@ WalletService.prototype._addCopayerToWallet = function(wallet, opts, cb) {
xPubKey: opts.xPubKey, xPubKey: opts.xPubKey,
requestPubKey: opts.requestPubKey, requestPubKey: opts.requestPubKey,
signature: opts.copayerSignature, signature: opts.copayerSignature,
customData: opts.customData,
}); });
self.storage.fetchCopayerLookup(copayer.id, function(err, res) { self.storage.fetchCopayerLookup(copayer.id, function(err, res) {
if (err) return cb(err); if (err) return cb(err);
if (res) return cb(Errors.COPAYER_REGISTERED); if (res) return cb(Errors.COPAYER_REGISTERED);
@ -508,7 +512,8 @@ WalletService.prototype.addAccess = function(opts, cb) {
* @param {string} opts.name - The copayer name. * @param {string} opts.name - The copayer name.
* @param {string} opts.xPubKey - Extended Public Key for this copayer. * @param {string} opts.xPubKey - Extended Public Key for this copayer.
* @param {string} opts.requestPubKey - Public Key used to check requests from this copayer. * @param {string} opts.requestPubKey - Public Key used to check requests from this copayer.
* @param {string} opts.copayerSignature - S(name|xPubKey|requestPubKey). Used by other copayers to verify the that the copayer joining knows the wallet secret. * @param {string} opts.copayerSignature - S(name|xPubKey|requestPubKey). Used by other copayers to verify that the copayer joining knows the wallet secret.
* @param {string} opts.customData - (optional) Custom data for this copayer.
*/ */
WalletService.prototype.joinWallet = function(opts, cb) { WalletService.prototype.joinWallet = function(opts, cb) {
var self = this; var self = this;

View File

@ -104,6 +104,7 @@ helpers.createAndJoinWallet = function(m, n, opts, cb) {
name: 'copayer ' + (i + 1), name: 'copayer ' + (i + 1),
xPubKey: TestData.copayers[i + offset].xPubKey_45H, xPubKey: TestData.copayers[i + offset].xPubKey_45H,
requestPubKey: TestData.copayers[i + offset].pubKey_1H_0, requestPubKey: TestData.copayers[i + offset].pubKey_1H_0,
customData: 'custom data ' + (i + 1),
}); });
server.joinWallet(copayerOpts, function(err, result) { server.joinWallet(copayerOpts, function(err, result) {
@ -912,6 +913,7 @@ describe('Wallet service', function() {
name: 'me', name: 'me',
xPubKey: TestData.copayers[0].xPubKey_45H, xPubKey: TestData.copayers[0].xPubKey_45H,
requestPubKey: TestData.copayers[0].pubKey_1H_0, requestPubKey: TestData.copayers[0].pubKey_1H_0,
customData: 'dummy custom data',
}); });
server.joinWallet(copayerOpts, function(err, result) { server.joinWallet(copayerOpts, function(err, result) {
should.not.exist(err); should.not.exist(err);
@ -923,6 +925,7 @@ describe('Wallet service', function() {
var copayer = wallet.copayers[0]; var copayer = wallet.copayers[0];
copayer.name.should.equal('me'); copayer.name.should.equal('me');
copayer.id.should.equal(copayerId); copayer.id.should.equal(copayerId);
copayer.customData.should.equal('dummy custom data');
server.getNotifications({}, function(err, notifications) { server.getNotifications({}, function(err, notifications) {
should.not.exist(err); should.not.exist(err);
var notif = _.find(notifications, { var notif = _.find(notifications, {
@ -1117,7 +1120,7 @@ describe('Wallet service', function() {
}); });
}); });
describe.only('#getStatus', function() { describe('#getStatus', function() {
var server, wallet; var server, wallet;
beforeEach(function(done) { beforeEach(function(done) {
helpers.createAndJoinWallet(1, 1, function(s, w) { helpers.createAndJoinWallet(1, 1, function(s, w) {
@ -1144,12 +1147,14 @@ describe('Wallet service', function() {
should.not.exist(status.wallet.publicKeyRing); should.not.exist(status.wallet.publicKeyRing);
should.not.exist(status.wallet.pubKey); should.not.exist(status.wallet.pubKey);
should.not.exist(status.wallet.addressManager); should.not.exist(status.wallet.addressManager);
should.not.exist(status.wallet.copayers[0].xPubKey); _.each(status.wallet.copayers, function(copayer) {
should.not.exist(status.wallet.copayers[0].requestPubKey); should.not.exist(copayer.xPubKey);
should.not.exist(status.wallet.copayers[0].signature); should.not.exist(copayer.requestPubKey);
should.not.exist(status.wallet.copayers[0].requestPubKey); should.not.exist(copayer.signature);
should.not.exist(status.wallet.copayers[0].addressManager); should.not.exist(copayer.requestPubKey);
should.not.exist(copayer.addressManager);
should.not.exist(copayer.customData);
});
done(); done();
}); });
}); });
@ -1167,7 +1172,11 @@ describe('Wallet service', function() {
should.exist(status.wallet.copayers[0].signature); should.exist(status.wallet.copayers[0].signature);
should.exist(status.wallet.copayers[0].requestPubKey); should.exist(status.wallet.copayers[0].requestPubKey);
should.exist(status.wallet.copayers[0].addressManager); should.exist(status.wallet.copayers[0].addressManager);
should.exist(status.wallet.copayers[0].customData);
// Do not return other copayer's custom data
_.each(_.rest(status.wallet.copayers), function(copayer) {
should.not.exist(copayer.customData);
});
done(); done();
}); });
}); });
@ -1593,7 +1602,8 @@ describe('Wallet service', function() {
it('should be able to re-gain access from xPrivKey', function(done) { it('should be able to re-gain access from xPrivKey', function(done) {
ws.addAccess(opts, function(err, res) { ws.addAccess(opts, function(err, res) {
should.not.exist(err); should.not.exist(err);
server.getBalance(res.wallet.walletId, function(err, bal) { should.not.exist(err); server.getBalance(res.wallet.walletId, function(err, bal) {
should.not.exist(err);
bal.totalAmount.should.equal(1e8); bal.totalAmount.should.equal(1e8);
getAuthServer(opts.copayerId, reqPrivKey, function(err, server2) { getAuthServer(opts.copayerId, reqPrivKey, function(err, server2) {
server2.getBalance(res.wallet.walletId, function(err, bal2) { server2.getBalance(res.wallet.walletId, function(err, bal2) {