adds tests to clientAPI and verified

This commit is contained in:
Matias Alejo Garcia 2015-02-16 15:02:20 -03:00
parent c92fbb2898
commit 85b1bc08b2
4 changed files with 21 additions and 16 deletions

View File

@ -1,15 +1,14 @@
var $ = require('preconditions').singleton(); var $ = require('preconditions').singleton();
var _ = require('lodash'); var _ = require('lodash');
var Bitcore = require('bitcore');
var BitcoinUtils = require('../bitcoinutils') var BitcoinUtils = require('../bitcoinutils')
function Verifier(opts) {}; function Verifier(opts) {};
Verifier.checkAddress = function(data, address) { Verifier.checkAddress = function(data, address) {
var local = BitcoinUtils.deriveAddress(data.publicKeyRing, address.path, data.m, data.network); var local = BitcoinUtils.deriveAddress(data.publicKeyRing, address.path, data.m, data.network);
if (local.address != address.address || JSON.stringify(local.publicKeys)!= JSON.stringify(address.publicKeys)) return (local.address == address.address
return cb('Server sent a fake address.'); && JSON.stringify(local.publicKeys) == JSON.stringify(address.publicKeys));
}; };
module.exports = Verifier; module.exports = Verifier;

View File

@ -10,6 +10,7 @@ log.debug = log.verbose;
var Bitcore = require('bitcore') var Bitcore = require('bitcore')
var SignUtils = require('../signutils'); var SignUtils = require('../signutils');
var Verifier = require('./verifier'); var Verifier = require('./verifier');
var ServerCompromissedError = require('./servercompromissederror')
var BASE_URL = 'http://localhost:3001/copay/api'; var BASE_URL = 'http://localhost:3001/copay/api';
@ -53,6 +54,7 @@ function API(opts) {
} }
this.storage = opts.storage; this.storage = opts.storage;
this.verbose = !!opts.verbose; this.verbose = !!opts.verbose;
this.request = request || opts.request;
if (this.verbose) { if (this.verbose) {
log.level = 'debug'; log.level = 'debug';
} }
@ -93,7 +95,7 @@ API.prototype._doRequest = function(method, url, args, data, cb) {
json: true, json: true,
}; };
log.verbose('Request Args', util.inspect(args)); log.verbose('Request Args', util.inspect(args));
request(args, function(err, res, body) { this.request(args, function(err, res, body) {
log.verbose('Response:', err, body); log.verbose('Response:', err, body);
if (err) return cb(err); if (err) return cb(err);
@ -101,6 +103,7 @@ API.prototype._doRequest = function(method, url, args, data, cb) {
_parseError(body); _parseError(body);
return cb('Request error'); return cb('Request error');
} }
return cb(null, body); return cb(null, body);
}); });
}; };
@ -289,7 +292,9 @@ API.prototype.createAddress = function(cb) {
if (data.publicKeyRing.length != data.n) if (data.publicKeyRing.length != data.n)
return cb('Wallet Incomplete, cannot derive address.') return cb('Wallet Incomplete, cannot derive address.')
Verifier.checkAddress(data, address); if (!Verifier.checkAddress(data, address)) {
return cb(new ServerCompromissedError('Server sent fake address'));
}
return cb(null, address); return cb(null, address);
}); });

View File

@ -6,17 +6,18 @@ function FileStorage(opts) {
throw new Error('Please set the config filename'); throw new Error('Please set the config filename');
} }
this.filename = opts.filename; this.filename = opts.filename;
this.fs = opts.fs || fs;
}; };
FileStorage.prototype.save = function(data) { FileStorage.prototype.save = function(data) {
fs.writeFileSync(this.filename, JSON.stringify(data)); this.fs.writeFileSync(this.filename, JSON.stringify(data));
}; };
FileStorage.prototype.load = function() { FileStorage.prototype.load = function() {
try { try {
return JSON.parse(fs.readFileSync(this.filename)); return JSON.parse(this.fs.readFileSync(this.filename));
} catch (ex) {} } catch (ex) {};
}; };

View File

@ -10,15 +10,15 @@ var levelup = require('levelup');
var memdown = require('memdown'); var memdown = require('memdown');
var Bitcore = require('bitcore'); var Bitcore = require('bitcore');
var Utils = require('../lib/utils'); var Utils = require('../../lib/utils');
var SignUtils = require('../lib/signutils'); var SignUtils = require('../../lib/signutils');
var Storage = require('../lib/storage'); 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 TestData = require('./testdata'); var TestData = require('../testdata');
var helpers = {}; var helpers = {};