rm data from create

This commit is contained in:
Matias Alejo Garcia 2015-02-17 15:13:42 -03:00
parent 9d226effe9
commit 605727fa2d
2 changed files with 49 additions and 41 deletions

View File

@ -22,6 +22,7 @@ client.export(function(err, x) {
var filename = program.config + '.svg'; var filename = program.config + '.svg';
var qr_svg = qr.image(x, { type: 'svg' }); var qr_svg = qr.image(x, { type: 'svg' });
qr_svg.pipe(require('fs').createWriteStream(filename)); qr_svg.pipe(require('fs').createWriteStream(filename));
console.log('Wallet Critical Data: exported to ' + filename);
} else { } else {
console.log('Wallet Critical Data:\n', x); console.log('Wallet Critical Data:\n', x);
} }

View File

@ -15,6 +15,8 @@ var ServerCompromisedError = require('./servercompromisederror')
var BASE_URL = 'http://localhost:3001/copay/api'; var BASE_URL = 'http://localhost:3001/copay/api';
var WALLET_CRITICAL_DATA = ['copayerId', 'xPrivKey', 'm', 'walletPrivKey', 'publicKeyRing'];
function _createProposalOpts(opts, signingKey) { function _createProposalOpts(opts, signingKey) {
var msg = opts.toAddress + '|' + opts.amount + '|' + opts.message; var msg = opts.toAddress + '|' + opts.amount + '|' + opts.message;
opts.proposalSignature = WalletUtils.signMessage(msg, signingKey); opts.proposalSignature = WalletUtils.signMessage(msg, signingKey);
@ -104,7 +106,12 @@ API.prototype._loadAndCheck = function(cb) {
}; };
API.prototype._doRequest = function(method, url, args, data, cb) { API.prototype._doRequest = function(method, url, args, data, cb) {
var reqSignature = _signRequest(method, url, args, data.signingPrivKey); var reqSignature;
data = data || {};
if (data.signingPrivKey)
reqSignature = _signRequest(method, url, args, data.signingPrivKey);
var absUrl = _getUrl(url); var absUrl = _getUrl(url);
var args = { var args = {
headers: { headers: {
@ -142,8 +149,6 @@ API.prototype._doGetRequest = function(url, data, cb) {
return this._doRequest('get', url, {}, data, cb); return this._doRequest('get', url, {}, data, cb);
}; };
API.prototype.createWallet = function(walletName, copayerName, m, n, network, cb) { API.prototype.createWallet = function(walletName, copayerName, m, n, network, cb) {
var self = this; var self = this;
network = network || 'livenet'; network = network || 'livenet';
@ -154,62 +159,46 @@ API.prototype.createWallet = function(walletName, copayerName, m, n, network, cb
if (data) if (data)
return cb('Storage already contains a wallet'); return cb('Storage already contains a wallet');
// Generate wallet key pair to verify copayers var walletPrivKey = new Bitcore.PrivateKey();
var privKey = new Bitcore.PrivateKey(null, network);
var pubKey = privKey.toPublicKey();
data = {
m: m,
n: n,
walletPrivKey: privKey.toWIF(),
network: network,
};
var args = { var args = {
name: walletName, name: walletName,
m: m, m: m,
n: n, n: n,
pubKey: pubKey.toString(), pubKey: walletPrivKey.toPublicKey().toString(),
network: network, network: network,
}; };
var url = '/v1/wallets/'; var url = '/v1/wallets/';
self._doPostRequest(url, args, {}, function(err, body) {
self._doPostRequest(url, args, data, function(err, body) {
if (err) return cb(err); if (err) return cb(err);
var walletId = body.walletId; var walletId = body.walletId;
var secret = walletId + ':' + privKey.toString() + ':' + (network == 'testnet' ? 'T' : 'L'); var secret = walletId + ':' + walletPrivKey.toWIF() + ':' + (network == 'testnet' ? 'T' : 'L');
var ret; var ret;
if (n > 1) if (n > 1)
ret = data.secret = secret; ret = secret;
self.storage.save(data, function(err) {
if (err) return cb(err);
self._joinWallet(data, secret, copayerName, function(err) {
return cb(err, ret);
});
self._joinWallet(secret, copayerName, function(err) {
return cb(err, ret);
}); });
}); });
}); });
}; };
API.prototype._joinWallet = function(data, secret, copayerName, cb) { API.prototype._joinWallet = function(secret, copayerName, cb) {
var self = this; var self = this;
data = data || {};
var secretSplit = secret.split(':'); var secretSplit = secret.split(':');
var walletId = secretSplit[0]; var walletId = secretSplit[0];
var walletPrivKey = Bitcore.PrivateKey.fromString(secretSplit[1]); var walletPrivKey = Bitcore.PrivateKey.fromString(secretSplit[1]);
var network = secretSplit[2] == 'T' ? 'testnet' : 'livenet'; var network = secretSplit[2] == 'T' ? 'testnet' : 'livenet';
data.xPrivKey = _createXPrivKey(network); var xPrivKey = _createXPrivKey(network);
var xPubKey = new Bitcore.HDPublicKey(data.xPrivKey); var xPubKey = new Bitcore.HDPublicKey(xPrivKey);
var xPubKeySignature = WalletUtils.signMessage(xPubKey.toString(), walletPrivKey); var xPubKeySignature = WalletUtils.signMessage(xPubKey.toString(), walletPrivKey);
var signingPrivKey = (new Bitcore.HDPrivateKey(data.xPrivKey)).derive('m/1/0').privateKey; var signingPrivKey = (new Bitcore.HDPrivateKey(xPrivKey)).derive('m/1/0').privateKey;
var args = { var args = {
walletId: walletId, walletId: walletId,
name: copayerName, name: copayerName,
@ -218,15 +207,17 @@ API.prototype._joinWallet = function(data, secret, copayerName, cb) {
}; };
var url = '/v1/wallets/' + walletId + '/copayers'; var url = '/v1/wallets/' + walletId + '/copayers';
this._doPostRequest(url, args, data, function(err, body) { this._doPostRequest(url, args, {}, function(err, body) {
var wallet = body.wallet; var wallet = body.wallet;
data.copayerId = body.copayerId; var data = {
data.walletPrivKey = walletPrivKey.toWIF(); copayerId: body.copayerId,
data.signingPrivKey = signingPrivKey.toWIF(); walletPrivKey: walletPrivKey.toWIF(),
data.m = wallet.m; signingPrivKey: signingPrivKey.toWIF(),
data.n = wallet.n; m: wallet.m,
data.publicKeyRing = wallet.publicKeyRing; n: wallet.n,
data.network = wallet.network, publicKeyRing: wallet.publicKeyRing,
network: wallet.network,
};
self.storage.save(data, cb); self.storage.save(data, cb);
}); });
}; };
@ -238,7 +229,7 @@ API.prototype.joinWallet = function(secret, copayerName, cb) {
if (data) if (data)
return cb('Storage already contains a wallet'); return cb('Storage already contains a wallet');
self._joinWallet(data, secret, copayerName, cb); self._joinWallet(secret, copayerName, cb);
}); });
}; };
@ -313,11 +304,27 @@ API.prototype.export = function(cb) {
this._loadAndCheck(function(err, data) { this._loadAndCheck(function(err, data) {
if (err) return cb(err); if (err) return cb(err);
var x = _.pick(data, ['publicKeyRing', 'xPrivKey', 'copayerId', 'm']) var x = _.pick(data, WALLET_CRITICAL_DATA)
return cb(null, JSON.stringify(x)); return cb(null, JSON.stringify(_.values(x)));
}); });
} }
API.prototype.import = function(str, cb) {
var self = this;
var inData = JSON.parse(str);
var data = {},
i = 0;
_.each(WALLET_CRITICAL_DATA, function(k) {
data[k] = inData[i++];
});
if (err) return cb(err);
}
API.prototype.getTxProposals = function(opts, cb) { API.prototype.getTxProposals = function(opts, cb) {
var self = this; var self = this;