This commit is contained in:
Ivan Socolsky 2015-01-28 10:52:45 -03:00
parent 635b2d8343
commit 2bf9c4da48
2 changed files with 26 additions and 20 deletions

View File

@ -19,10 +19,12 @@ var TxProposal = require('./model/txproposal');
/** /**
* Creates an instance of the Copay server. * Creates an instance of the Copay server.
* @constructor * @constructor
* @param {Object} opts
* @param {Storage} [opts.storage] - The storage provider.
*/ */
function CopayServer(opts) { function CopayServer(opts) {
opts = opts || {}; opts = opts || {};
this.storage = new Storage(opts); this.storage = opts.storage || new Storage();
}; };
@ -81,7 +83,7 @@ CopayServer.prototype.createWallet = function (opts, cb) {
}; };
CopayServer.prototype.runLocked = function (walletId, cb, task) { CopayServer.prototype._runLocked = function (walletId, cb, task) {
var self = this; var self = this;
Lock.get(walletId, function (lock) { Lock.get(walletId, function (lock) {
@ -105,13 +107,12 @@ CopayServer.prototype.runLocked = function (walletId, cb, task) {
CopayServer.prototype.joinWallet = function (opts, cb) { CopayServer.prototype.joinWallet = function (opts, cb) {
var self = this; var self = this;
self.runLocked(opts.walletId, cb, function (cb) { self._runLocked(opts.walletId, cb, function (cb) {
self.getWallet({ id: opts.walletId, includeCopayers: true }, function (err, wallet) { self.getWallet({ id: opts.walletId, includeCopayers: true }, function (err, wallet) {
if (err) return cb(err); if (err) return cb(err);
if (!wallet) return cb('Wallet not found'); if (!wallet) return cb('Wallet not found');
if (_.find(wallet.copayers, { xPubKey: opts.xPubKey })) return cb('Copayer already in wallet'); if (_.find(wallet.copayers, { xPubKey: opts.xPubKey })) return cb('Copayer already in wallet');
if (wallet.copayers.length == wallet.n) return cb('Wallet full'); if (wallet.copayers.length == wallet.n) return cb('Wallet full');
// TODO: validate copayer's extended public key using the public key from this wallet // TODO: validate copayer's extended public key using the public key from this wallet
// Note: use Bitcore.crypto.ecdsa .verify() // Note: use Bitcore.crypto.ecdsa .verify()
@ -149,6 +150,7 @@ CopayServer.prototype._doCreateAddress = function (pkr, index, isChange) {
CopayServer.prototype.createAddress = function (opts, cb) { CopayServer.prototype.createAddress = function (opts, cb) {
var self = this; var self = this;
self._runLocked(opts.walletId, cb, function (cb) {
self.getWallet({ id: opts.walletId }, function (err, wallet) { self.getWallet({ id: opts.walletId }, function (err, wallet) {
if (err) return cb(err); if (err) return cb(err);
if (!wallet) return cb('Wallet not found'); if (!wallet) return cb('Wallet not found');
@ -165,6 +167,7 @@ CopayServer.prototype._doCreateAddress = function (pkr, index, isChange) {
}); });
}); });
}); });
});
}; };
CopayServer.prototype._verifyMessageSignature = function (copayerId, message, signature) { CopayServer.prototype._verifyMessageSignature = function (copayerId, message, signature) {

View File

@ -9,23 +9,26 @@ var should = chai.should();
var levelup = require('levelup'); var levelup = require('levelup');
var memdown = require('memdown'); var memdown = require('memdown');
var Storage = require('../lib/storage');
var Wallet = require('../lib/model/wallet'); var Wallet = require('../lib/model/wallet');
var Address = require('../lib/model/address'); var Address = require('../lib/model/address');
var Copayer = require('../lib/model/copayer'); var Copayer = require('../lib/model/copayer');
var CopayServer = require('../lib/server'); var CopayServer = require('../lib/server');
var db; var db, storage;
var server; var server;
describe('Copay server', function() { describe('Copay server', function() {
beforeEach(function() { beforeEach(function() {
db = levelup(memdown, { valueEncoding: 'json' }); db = levelup(memdown, { valueEncoding: 'json' });
storage = new Storage({ db: db });
}); });
describe('#getWallet', function() { describe('#getWallet', function() {
beforeEach(function() { beforeEach(function() {
server = new CopayServer({ server = new CopayServer({
db: db, storage: storage,
}); });
}); });
@ -102,7 +105,7 @@ describe('Copay server', function() {
describe('#createWallet', function() { describe('#createWallet', function() {
beforeEach(function() { beforeEach(function() {
server = new CopayServer({ server = new CopayServer({
db: db, storage: storage,
}); });
}); });
@ -151,7 +154,7 @@ describe('Copay server', function() {
describe('#joinWallet', function() { describe('#joinWallet', function() {
beforeEach(function() { beforeEach(function() {
server = new CopayServer({ server = new CopayServer({
db: db, storage: storage,
}); });
}); });
@ -324,7 +327,7 @@ describe('Copay server', function() {
describe('#createAddress', function() { describe('#createAddress', function() {
beforeEach(function() { beforeEach(function() {
server = new CopayServer({ server = new CopayServer({
db: db, storage: storage,
}); });
}); });
@ -345,7 +348,7 @@ describe('Copay server', function() {
describe('#createTx', function() { describe('#createTx', function() {
beforeEach(function(done) { beforeEach(function(done) {
server = new CopayServer({ server = new CopayServer({
db: db, storage: storage,
}); });
server._doCreateAddress = sinon.stub().returns(new Address({ address: 'addr1', path: 'path1' })); server._doCreateAddress = sinon.stub().returns(new Address({ address: 'addr1', path: 'path1' }));
helpers.createAndJoinWallet('123', 2, 2, function (err, wallet) { helpers.createAndJoinWallet('123', 2, 2, function (err, wallet) {