This commit is contained in:
parent
635b2d8343
commit
2bf9c4da48
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue