From ee38b5ee85e4c41a08731fd055429cc369009780 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Fri, 13 Feb 2015 18:03:55 -0300 Subject: [PATCH 1/2] sign & reject --- app.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/app.js b/app.js index 6813fec..2ece691 100644 --- a/app.js +++ b/app.js @@ -181,6 +181,26 @@ router.get('/v1/balance/', function(req, res) { }); }); +router.post('/v1/txproposals/:id/signatures', function(req, res) { + req.body.txProposalId = req.params['id']; + getServerWithAuth(req, res, function(server) { + server.signTx(req.body, function(err, txp) { + if (err) return returnError(err, res, req); + res.end(); + }); + }); +}); + +router.post('/v1/txproposals/:id/rejections', function(req, res) { + req.body.txProposalId = req.params['id']; + getServerWithAuth(req, res, function(server) { + server.signTx(req.body, function(err, txp) { + if (err) return returnError(err, res, req); + res.end(); + }); + }); +}); + // TODO: DEBUG only! router.get('/v1/dump', function(req, res) { var server = CopayServer.getInstance(); From 8de10975cf8d857bee29d113aceffaded7c1a310 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Fri, 13 Feb 2015 18:27:35 -0300 Subject: [PATCH 2/2] add copayer name to txp --- lib/storage.js | 43 ++++++++++++++++++++++++++++++------------- test/integration.js | 10 +++++++++- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/lib/storage.js b/lib/storage.js index 4971fee..f74bd7c 100644 --- a/lib/storage.js +++ b/lib/storage.js @@ -105,17 +105,6 @@ Storage.prototype.fetchCopayerLookup = function(copayerId, cb) { }); }; -Storage.prototype.fetchTx = function(walletId, txProposalId, cb) { - this.db.get(KEY.TXP(walletId, txProposalId), function(err, data) { - if (err) { - if (err.notFound) return cb(); - return cb(err); - } - return cb(null, TxProposal.fromObj(data)); - }); -}; - - Storage.prototype.fetchNotification = function(walletId, notificationId, cb) { this.db.get(KEY.NOTIFICATION(walletId, notificationId), function(err, data) { if (err) { @@ -126,9 +115,35 @@ Storage.prototype.fetchNotification = function(walletId, notificationId, cb) { }); }; +Storage.prototype._completeTxData = function(walletId, txs, cb) { + var txList = [].concat(txs); + this.fetchWallet(walletId, function(err, wallet) { + if (err) return cb(err); + _.each(txList, function(tx) { + tx.creatorName = wallet.getCopayer(tx.creatorId).name; + _.each(_.values(tx.actions), function(action) { + action.copayerName = wallet.getCopayer(action.copayerId).name; + }); + }); + return cb(null, txs); + }); +}; + +Storage.prototype.fetchTx = function(walletId, txProposalId, cb) { + var self = this; + this.db.get(KEY.TXP(walletId, txProposalId), function(err, data) { + if (err) { + if (err.notFound) return cb(); + return cb(err); + } + return self._completeTxData(walletId, TxProposal.fromObj(data), cb); + }); +}; Storage.prototype.fetchPendingTxs = function(walletId, cb) { + var self = this; + var txs = []; var key = KEY.PENDING_TXP(walletId); this.db.createReadStream({ @@ -143,7 +158,7 @@ Storage.prototype.fetchPendingTxs = function(walletId, cb) { return cb(err); }) .on('end', function() { - return cb(null, txs); + return self._completeTxData(walletId, txs, cb); }); }; @@ -156,6 +171,8 @@ Storage.prototype.fetchPendingTxs = function(walletId, cb) { * @param opts.limit */ Storage.prototype.fetchTxs = function(walletId, opts, cb) { + var self = this; + var txs = []; opts = opts || {}; opts.limit = _.isNumber(opts.limit) ? parseInt(opts.limit) : -1; @@ -179,7 +196,7 @@ Storage.prototype.fetchTxs = function(walletId, opts, cb) { return cb(err); }) .on('end', function() { - return cb(null, txs); + return self._completeTxData(walletId, txs, cb); }); }; diff --git a/test/integration.js b/test/integration.js index f71df22..b4685f4 100644 --- a/test/integration.js +++ b/test/integration.js @@ -1065,7 +1065,15 @@ describe('Copay server', function() { should.not.exist(err); txp.status.should.equal('broadcasted'); txp.txid.should.equal('1122334455'); - done(); + server.getTx({ + id: txp.id + }, function(err, txp) { + var actions = _.values(txp.actions); + actions.length.should.equal(1); + actions[0].copayerId.should.equal(wallet.copayers[0].id); + actions[0].copayerName.should.equal(wallet.copayers[0].name); + done(); + }); }); }); });