mirror of https://github.com/BTCPrivate/copay.git
Merge branch 'master' of github.com:bitpay/copay into feature/copay-shell
This commit is contained in:
commit
60cda70f72
2
API.js
2
API.js
|
@ -12,7 +12,7 @@ API.prototype._init = function(opts) {
|
|||
|
||||
var WalletFactory = require('soop').load('./js/models/core/WalletFactory', {
|
||||
Storage: opts.Storage || require('./test/mocks/FakeStorage'),
|
||||
Network: opts.Network || require('./js/models/network/Base'),
|
||||
Network: opts.Network || require('./js/models/network/WebRTC'),
|
||||
Blockchain: opts.Blockchain || require('./js/models/blockchain/Insight')
|
||||
});
|
||||
|
||||
|
|
|
@ -109,12 +109,12 @@ var defaultConfig = {
|
|||
// blockchain service API config
|
||||
blockchain: {
|
||||
host: 'test.insight.is',
|
||||
port: 3001
|
||||
port: 80
|
||||
},
|
||||
// socket service API config
|
||||
socket: {
|
||||
host: 'test.insight.is',
|
||||
port: 3001
|
||||
port: 80
|
||||
},
|
||||
|
||||
// local encryption/security config
|
||||
|
|
45
js/app.js
45
js/app.js
|
@ -16,46 +16,23 @@ var log = function() {
|
|||
if (config.verbose) console.log(arguments);
|
||||
}
|
||||
|
||||
// From the bundle
|
||||
var copay = require('copay');
|
||||
|
||||
var copayApp = window.copayApp = angular.module('copay',[
|
||||
var copayApp = window.copayApp = angular.module('copayApp',[
|
||||
'ngRoute',
|
||||
'angularMoment',
|
||||
'mm.foundation',
|
||||
'monospaced.qrcode',
|
||||
'notifications',
|
||||
'copay.filters',
|
||||
'copay.header',
|
||||
'copay.footer',
|
||||
'copay.addresses',
|
||||
'copay.transactions',
|
||||
'copay.send',
|
||||
'copay.backup',
|
||||
'copay.walletFactory',
|
||||
'copay.signin',
|
||||
'copay.socket',
|
||||
'copay.controllerUtils',
|
||||
'copay.setup',
|
||||
'copay.directives',
|
||||
'copay.video',
|
||||
'copay.import',
|
||||
'copay.passphrase',
|
||||
'copay.settings'
|
||||
'copayApp.filters',
|
||||
'copayApp.controllers',
|
||||
'copayApp.directives',
|
||||
'copayApp.services',
|
||||
]);
|
||||
|
||||
angular.module('copay.header', []);
|
||||
angular.module('copay.footer', []);
|
||||
angular.module('copay.addresses', []);
|
||||
angular.module('copay.transactions', []);
|
||||
angular.module('copay.send', []);
|
||||
angular.module('copay.backup', []);
|
||||
angular.module('copay.walletFactory', []);
|
||||
angular.module('copay.controllerUtils', []);
|
||||
angular.module('copay.signin', []);
|
||||
angular.module('copay.setup', []);
|
||||
angular.module('copay.socket', []);
|
||||
angular.module('copay.directives', []);
|
||||
angular.module('copay.video', []);
|
||||
angular.module('copay.import', []);
|
||||
angular.module('copay.passphrase', []);
|
||||
angular.module('copay.settings', []);
|
||||
angular.module('copayApp.filters', []);
|
||||
angular.module('copayApp.controllers', []);
|
||||
angular.module('copayApp.directives', []);
|
||||
angular.module('copayApp.services', []);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.addresses').controller('AddressesController',
|
||||
angular.module('copayApp.controllers').controller('AddressesController',
|
||||
function($scope, $rootScope, $timeout, controllerUtils) {
|
||||
$scope.loading = false;
|
||||
var w = $rootScope.wallet;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.backup').controller('BackupController',
|
||||
angular.module('copayApp.controllers').controller('BackupController',
|
||||
function($scope, $rootScope, $location, $window, $timeout, $modal) {
|
||||
$scope.title = 'Backup';
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.footer').controller('FooterController', function($rootScope, $sce, $scope, $http) {
|
||||
angular.module('copayApp.controllers').controller('FooterController', function($rootScope, $sce, $scope, $http) {
|
||||
|
||||
if (config.themes && Array.isArray(config.themes) && config.themes[0]) {
|
||||
$scope.themes = config.themes;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.header').controller('HeaderController',
|
||||
angular.module('copayApp.controllers').controller('HeaderController',
|
||||
function($scope, $rootScope, $location, $notification, $http, walletFactory, controllerUtils) {
|
||||
$scope.menu = [
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.import').controller('ImportController',
|
||||
angular.module('copayApp.controllers').controller('ImportController',
|
||||
function($scope, $rootScope, walletFactory, controllerUtils, Passphrase) {
|
||||
$scope.title = 'Import a backup';
|
||||
var reader = new FileReader();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.send').controller('SendController',
|
||||
angular.module('copayApp.controllers').controller('SendController',
|
||||
function($scope, $rootScope, $window, $location, $timeout) {
|
||||
$scope.title = 'Send';
|
||||
$scope.loading = false;
|
||||
|
@ -93,7 +93,7 @@ angular.module('copay.send').controller('SendController',
|
|||
//alert(JSON.stringify(qrcode.process(context)));
|
||||
qrcode.decode();
|
||||
} catch (e) {
|
||||
console.log('error decoding QR: '+e);
|
||||
// error decoding QR
|
||||
}
|
||||
}, 1500);
|
||||
};
|
||||
|
@ -135,7 +135,6 @@ angular.module('copay.send').controller('SendController',
|
|||
};
|
||||
|
||||
var _videoError = function(err) {
|
||||
console.log('Video Error: ' + JSON.stringify(err));
|
||||
_scanStop();
|
||||
};
|
||||
|
||||
|
@ -143,7 +142,6 @@ angular.module('copay.send').controller('SendController',
|
|||
_scanStop();
|
||||
|
||||
var str = (data.indexOf('bitcoin:') === 0) ? data.substring(8) : data;
|
||||
console.log('QR code detected: ' + str);
|
||||
$scope.$apply(function() {
|
||||
$scope.address = str;
|
||||
});
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.settings').controller('SettingsController',
|
||||
angular.module('copayApp.controllers').controller('SettingsController',
|
||||
function($scope, $rootScope, $window, $location) {
|
||||
$scope.title = 'Settings';
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ var valid_pairs = {
|
|||
'1,12': 489
|
||||
};
|
||||
|
||||
angular.module('copay.setup').controller('SetupController',
|
||||
angular.module('copayApp.controllers').controller('SetupController',
|
||||
function($scope, $rootScope, $location, $timeout, walletFactory, controllerUtils, Passphrase) {
|
||||
|
||||
$rootScope.videoInfo = {};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.signin').controller('SigninController',
|
||||
angular.module('copayApp.controllers').controller('SigninController',
|
||||
function($scope, $rootScope, $location, walletFactory, controllerUtils, Passphrase) {
|
||||
var cmp = function(o1, o2){
|
||||
var v1 = o1.show.toLowerCase(), v2 = o2.show.toLowerCase();
|
||||
|
@ -21,13 +21,16 @@ angular.module('copay.signin').controller('SigninController',
|
|||
$scope.loading = true;
|
||||
var password = form.openPassword.$modelValue;
|
||||
|
||||
console.log('## Obtaining passphrase...');
|
||||
Passphrase.getBase64Async(password, function(passphrase){
|
||||
console.log('## Passphrase obtained');
|
||||
var w, errMsg;
|
||||
try{
|
||||
var w = walletFactory.open($scope.selectedWalletId, { passphrase: passphrase});
|
||||
} catch (e){
|
||||
errMsg = e.message;
|
||||
};
|
||||
if (!w) {
|
||||
$scope.loading = $scope.failure = false;
|
||||
$rootScope.$flashMessage = { message: 'Wrong password', type: 'error'};
|
||||
$rootScope.$flashMessage = { message: errMsg || 'Wrong password', type: 'error'};
|
||||
$rootScope.$digest();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.transactions').controller('TransactionsController',
|
||||
angular.module('copayApp.controllers').controller('TransactionsController',
|
||||
function($scope, $rootScope, $timeout, controllerUtils) {
|
||||
|
||||
$scope.title = 'Transactions';
|
||||
|
@ -54,7 +54,6 @@ angular.module('copay.transactions').controller('TransactionsController',
|
|||
$rootScope.txAlertCount = 0;
|
||||
var w = $rootScope.wallet;
|
||||
w.sendTx(ntxid, function(txid) {
|
||||
console.log('[transactions.js.68:txid:] SENTTX CALLBACK',txid); //TODO
|
||||
$rootScope.$flashMessage = txid
|
||||
? {type:'success', message: 'Transaction broadcasted. txid: ' + txid}
|
||||
: {type:'error', message: 'There was an error sending the Transaction'}
|
||||
|
@ -90,7 +89,6 @@ angular.module('copay.transactions').controller('TransactionsController',
|
|||
$scope.getTransactions = function(cb) {
|
||||
var w =$rootScope.wallet;
|
||||
if (w) {
|
||||
console.log('### Querying last transactions...'); //TODO
|
||||
var addresses = w.getAddressesStr();
|
||||
if (addresses.length > 0) {
|
||||
return w.blockchain.getTransactions(addresses, cb);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.directives')
|
||||
angular.module('copayApp.directives')
|
||||
.directive('validAddress', [
|
||||
|
||||
function() {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.filters', [])
|
||||
angular.module('copayApp.filters', [])
|
||||
.filter('amTimeAgo', ['amMoment', function(amMoment) {
|
||||
return function(input) {
|
||||
return amMoment.preprocessDate(input).fromNow();
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
|
||||
angular.element(document).ready(function() {
|
||||
// Init the app
|
||||
angular.bootstrap(document, ['copay']);
|
||||
angular.bootstrap(document, ['copayApp']);
|
||||
});
|
||||
|
|
|
@ -150,10 +150,8 @@ Insight.prototype.sendRawTransaction = function(rawtx, cb) {
|
|||
}
|
||||
};
|
||||
this._request(options, function(err, res) {
|
||||
console.log('[Insight.js.73:err:]', err); //TODO
|
||||
if (err) return cb();
|
||||
|
||||
console.log('[Insight.js.74]', res); //TODO
|
||||
return cb(res.txid);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -13,10 +13,6 @@ var coinUtil = bitcore.util;
|
|||
var Transaction = bitcore.Transaction
|
||||
var util = bitcore.util;
|
||||
|
||||
var Storage = imports.Storage || require('../storage/Base.js');
|
||||
var storage = Storage.default();
|
||||
|
||||
|
||||
function PublicKeyRing(opts) {
|
||||
opts = opts || {};
|
||||
|
||||
|
@ -165,8 +161,7 @@ PublicKeyRing.prototype.getPubKeys = function(index, isChange) {
|
|||
PublicKeyRing.prototype._checkIndexRange = function (index, isChange) {
|
||||
if ( (isChange && index > this.changeAddressIndex) ||
|
||||
(!isChange && index > this.addressIndex)) {
|
||||
console.log('Out of bounds at getAddress: Index %d isChange: %d', index, isChange);
|
||||
throw new Error('index out of bound');
|
||||
throw new Error('Out of bounds at getAddress: Index %d isChange: %d', index, isChange);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -10,9 +10,6 @@ var Builder = bitcore.TransactionBuilder;
|
|||
var Script = bitcore.Script;
|
||||
var buffertools = bitcore.buffertools;
|
||||
|
||||
var Storage = imports.Storage || require('../storage/Base');
|
||||
var storage = Storage.default();
|
||||
|
||||
function TxProposal(opts) {
|
||||
this.creator = opts.creator;
|
||||
this.createdTs = opts.createdTs;
|
||||
|
|
|
@ -65,7 +65,6 @@ Wallet.prototype.seedCopayer = function(pubKey) {
|
|||
Wallet.prototype.connectToAll = function() {
|
||||
|
||||
var all = this.publicKeyRing.getAllCopayerIds();
|
||||
console.log('[Wallet.js.58] connecting'); //TODO
|
||||
this.network.connectToCopayers(all);
|
||||
if (this.seededCopayerId) {
|
||||
this.sendWalletReady(this.seededCopayerId);
|
||||
|
@ -246,11 +245,8 @@ Wallet.prototype.netStart = function() {
|
|||
self.emit('ready', net.getPeer());
|
||||
self.token = net.peer.options.token;
|
||||
setTimeout(function() {
|
||||
console.log('[EMIT publicKeyRingUpdated:]'); //TODO
|
||||
self.emit('publicKeyRingUpdated', true);
|
||||
console.log('[CONNECT:]'); //TODO
|
||||
self.scheduleConnect();
|
||||
console.log('[EMIT TxProposal]'); //TODO
|
||||
self.emit('txProposalsUpdated');
|
||||
self.store();
|
||||
}, 10);
|
||||
|
|
|
@ -31,8 +31,9 @@ function WalletFactory(config, version) {
|
|||
|
||||
WalletFactory.prototype.log = function(){
|
||||
if (!this.verbose) return;
|
||||
if (console)
|
||||
if (console) {
|
||||
console.log.apply(console, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -47,10 +48,8 @@ WalletFactory.prototype._checkRead = function(walletId) {
|
|||
};
|
||||
|
||||
WalletFactory.prototype.fromObj = function(obj) {
|
||||
console.log('## Decrypting'); //TODO
|
||||
var w = Wallet.fromObj(obj, this.storage, this.network, this.blockchain);
|
||||
w.verbose = this.verbose;
|
||||
this.log('### WALLET OPENED:', w.id);
|
||||
return w;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
var imports = require('soop').imports();
|
||||
var EventEmitter = imports.EventEmitter || require('events').EventEmitter;
|
||||
|
||||
/*
|
||||
* Emits
|
||||
* 'networkChange'
|
||||
* when network layout has change (new/lost peers, etc)
|
||||
*
|
||||
* 'data'
|
||||
* when an unknown data type arrives
|
||||
*
|
||||
* Provides
|
||||
* send(toPeerIds, {data}, cb?)
|
||||
*
|
||||
*/
|
||||
|
||||
function Network(opts) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
Network.parent = EventEmitter;
|
||||
// Allows subscribing to the following events:
|
||||
// Network#on('networkChange', listener);
|
||||
// Network#on('data', listener);
|
||||
Network.prototype.start = function(callback) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
Network.prototype.send = function(peerIds, data, cb) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
Network.prototype.connectTo = function(peerId, openCallback, closeCallback) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
Network.prototype.disconnect = function(peerId, cb) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
module.exports = require('soop')(Network);
|
|
@ -50,7 +50,6 @@ Network.prototype.cleanUp = function() {
|
|||
this.copayerForPeer={};
|
||||
this.connections={};
|
||||
if (this.peer) {
|
||||
console.log('## DESTROYING PEER INSTANCE'); //TODO
|
||||
this.peer.disconnect();
|
||||
this.peer.destroy();
|
||||
this.peer = null;
|
||||
|
@ -104,7 +103,6 @@ Network.prototype.connectedCopayers = function() {
|
|||
};
|
||||
|
||||
Network.prototype._deletePeer = function(peerId) {
|
||||
console.log('### Deleting connection from peer:', peerId);
|
||||
|
||||
delete this.isInboundPeerAuth[peerId];
|
||||
delete this.copayerForPeer[peerId];
|
||||
|
@ -127,17 +125,14 @@ Network.prototype.connectToCopayers = function(copayerIds) {
|
|||
|
||||
arrayDiff.forEach(function(copayerId) {
|
||||
if (this.allowedCopayerIds && !this.allowedCopayerIds[copayerId]) {
|
||||
console.log('### IGNORING STRANGE COPAYER:', copayerId);
|
||||
this._deletePeer(this.peerFromCopayer(copayerId));
|
||||
} else {
|
||||
console.log('### CONNECTING TO:', copayerId);
|
||||
self.connectTo(copayerId);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Network.prototype._sendHello = function(copayerId) {
|
||||
console.log('### SENDING HELLO TO ', copayerId);
|
||||
this.send(copayerId, {
|
||||
type: 'hello',
|
||||
copayerId: this.copayerId,
|
||||
|
@ -158,25 +153,18 @@ Network.prototype._onData = function(encStr, isInbound, peerId) {
|
|||
var data = this._decrypt(encStr);
|
||||
payload= JSON.parse(data);
|
||||
} catch (e) {
|
||||
console.log('### ERROR IN DATA: "%s" ', data, isInbound, e);
|
||||
this._deletePeer(peerId);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('### RECEIVED INBOUND?:%s TYPE: %s FROM %s',
|
||||
isInbound, payload.type, peerId, payload);
|
||||
|
||||
if(isInbound && payload.type === 'hello') {
|
||||
var payloadStr = JSON.stringify(payload);
|
||||
|
||||
if (this.allowedCopayerIds && !this.allowedCopayerIds[payload.copayerId]) {
|
||||
console.log('#### Peer sent HELLO but it is not on the allowedCopayerIds. Closing connection',
|
||||
this.allowedCopayerIds, payload.copayerId);
|
||||
this._deletePeer(peerId);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('#### Peer sent hello. Setting it up.'); //TODO
|
||||
this._addConnectedCopayer(payload.copayerId, isInbound);
|
||||
this._setInboundPeerAuth(peerId, true);
|
||||
return;
|
||||
|
@ -199,7 +187,6 @@ Network.prototype._onData = function(encStr, isInbound, peerId) {
|
|||
|
||||
Network.prototype._checkAnyPeer = function() {
|
||||
if (!this.connectedPeers.length) {
|
||||
console.log('EMIT openError: no more peers, not even you!');
|
||||
this.cleanUp();
|
||||
this.emit('openError');
|
||||
}
|
||||
|
@ -219,9 +206,6 @@ Network.prototype._setupConnectionHandlers = function(dataConn, toCopayerId) {
|
|||
|
||||
self.connections[dataConn.peer] = dataConn;
|
||||
|
||||
console.log('### DATA CONNECTION READY: %s (inbound: %s) AUTHENTICATING...',
|
||||
dataConn.peer, isInbound);
|
||||
|
||||
// The connecting peer send hello
|
||||
if(toCopayerId) {
|
||||
self.emit('connected');
|
||||
|
@ -236,7 +220,6 @@ Network.prototype._setupConnectionHandlers = function(dataConn, toCopayerId) {
|
|||
});
|
||||
|
||||
dataConn.on('error', function(e) {
|
||||
console.log('### DATA ERROR', e); //TODO
|
||||
self._onClose(dataConn.peer);
|
||||
self._checkAnyPeer();
|
||||
self.emit('dataError');
|
||||
|
@ -245,7 +228,6 @@ Network.prototype._setupConnectionHandlers = function(dataConn, toCopayerId) {
|
|||
dataConn.on('close', function() {
|
||||
if (self.closing) return;
|
||||
|
||||
console.log('### CLOSE RECV FROM:', dataConn.peer);
|
||||
self._onClose(dataConn.peer);
|
||||
self._checkAnyPeer();
|
||||
});
|
||||
|
@ -263,18 +245,14 @@ Network.prototype._setupPeerHandlers = function(openCallback) {
|
|||
|
||||
p.on('error', function(err) {
|
||||
if (!err.message.match(/Could\snot\sconnect\sto peer/)) {
|
||||
console.log('### PEER ERROR:', err);
|
||||
self.emit('error', err);
|
||||
}
|
||||
self._checkAnyPeer();
|
||||
});
|
||||
|
||||
p.on('connection', function(dataConn) {
|
||||
console.log('### NEW INBOUND CONNECTION %d/%d', self.connectedPeers.length, self.maxPeers);
|
||||
if (self.connectedPeers.length >= self.maxPeers) {
|
||||
console.log('### PEER REJECTED. PEER MAX LIMIT REACHED');
|
||||
dataConn.on('open', function() {
|
||||
console.log('### CLOSING CONN FROM:' + dataConn.peer);
|
||||
dataConn.close();
|
||||
});
|
||||
} else {
|
||||
|
@ -288,11 +266,9 @@ Network.prototype._setupPeerHandlers = function(openCallback) {
|
|||
Network.prototype._addCopayerMap = function(peerId, copayerId) {
|
||||
if (!this.copayerForPeer[peerId]) {
|
||||
if(Object.keys(this.copayerForPeer).length < this.maxPeers) {
|
||||
console.log('Adding peer/copayer', peerId, copayerId); //TODO
|
||||
this.copayerForPeer[peerId]=copayerId;
|
||||
}
|
||||
else {
|
||||
console.log('### maxPeerLimit of %d reached. Refusing to add more copayers.', this.maxPeers); //TODO
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -333,7 +309,6 @@ Network.prototype.start = function(opts, openCallback) {
|
|||
if (!this.copayerId)
|
||||
this.setCopayerId(opts.copayerId);
|
||||
|
||||
console.log('CREATING PEER INSTANCE:', this.peerId); //TODO
|
||||
this.peer = new Peer(this.peerId, this.opts);
|
||||
this.started = true;
|
||||
this._setupPeerHandlers(openCallback);
|
||||
|
@ -378,9 +353,6 @@ Network.prototype._sendToOne = function(copayerId, payload, sig, cb) {
|
|||
if (dataConn) {
|
||||
dataConn.send(payload);
|
||||
}
|
||||
else {
|
||||
console.log('[WebRTC.js.255] WARN: NO CONNECTION TO:', peerId); //TODO
|
||||
}
|
||||
}
|
||||
if (typeof cb === 'function') cb();
|
||||
};
|
||||
|
@ -417,7 +389,6 @@ Network.prototype.connectTo = function(copayerId) {
|
|||
var self = this;
|
||||
|
||||
var peerId = this.peerFromCopayer(copayerId);
|
||||
console.log('### STARTING CONNECTION TO:\n\t'+ peerId+"\n\t"+ copayerId);
|
||||
var dataConn = this.peer.connect(peerId, {
|
||||
serialization: 'none',
|
||||
reliable: true,
|
||||
|
@ -426,9 +397,6 @@ Network.prototype.connectTo = function(copayerId) {
|
|||
};
|
||||
|
||||
Network.prototype.lockIncommingConnections = function(allowedCopayerIdsArray) {
|
||||
if (!this.allowedCopayerIds)
|
||||
console.log('[webrtc] #### LOCKING INCOMMING CONNECTIONS');
|
||||
|
||||
this.allowedCopayerIds={};
|
||||
for(var i in allowedCopayerIdsArray) {
|
||||
this.allowedCopayerIds[ allowedCopayerIdsArray[i] ] = true;
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
var imports = require('soop').imports();
|
||||
|
||||
function Storage() {
|
||||
}
|
||||
|
||||
// get value by key
|
||||
Storage.prototype.get = function(walletId,k) {
|
||||
};
|
||||
|
||||
// set value for key
|
||||
Storage.prototype.set = function(walletId, k, v) {
|
||||
};
|
||||
|
||||
// remove value for key
|
||||
Storage.prototype.remove = function(walletId, k) {
|
||||
};
|
||||
|
||||
Storage.prototype.getWalletIds = function() {
|
||||
};
|
||||
|
||||
// obj contains keys to be set
|
||||
Storage.prototype.setFromObj = function(walletId, obj) {
|
||||
};
|
||||
|
||||
Storage.prototype.setFromEncryptedObj = function(walletId, obj) {
|
||||
};
|
||||
|
||||
// wallet export - hex of encrypted wallet object
|
||||
Storage.prototype.getEncryptedObj = function(walletId) {
|
||||
};
|
||||
|
||||
// remove all values
|
||||
Storage.prototype.clearAll = function() {
|
||||
};
|
||||
|
||||
module.exports = require('soop')(Storage);
|
|
@ -1,7 +1,6 @@
|
|||
'use strict';
|
||||
var imports = require('soop').imports();
|
||||
var fs = imports.fs || require('fs');
|
||||
var parent = imports.parent || require('./Base');
|
||||
var CryptoJS = require('node-cryptojs-aes').CryptoJS;
|
||||
|
||||
var passwords = [];
|
||||
|
@ -12,7 +11,6 @@ function Storage(opts) {
|
|||
this.data = {};
|
||||
passwords[0] = opts.password;
|
||||
}
|
||||
Storage.parent = parent;
|
||||
|
||||
Storage.prototype._encrypt = function(string) {
|
||||
var encrypted = CryptoJS.AES.encrypt(string, passwords[0]);
|
||||
|
|
|
@ -41,7 +41,7 @@ Storage.prototype._decrypt = function(base64) {
|
|||
if (decrypted)
|
||||
decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
||||
} catch (e) {
|
||||
console.log('Error while decrypting ' + base64);
|
||||
// Error while decrypting
|
||||
return null;
|
||||
}
|
||||
return decryptedStr;
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
var imports = require('soop').imports();
|
||||
var parent = imports.parent || require('./Base');
|
||||
|
||||
function Storage() {
|
||||
}
|
||||
Storage.parent = parent;
|
||||
|
||||
Storage.prototype._read = function(k) {
|
||||
var ret;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
//Setting up route
|
||||
angular
|
||||
.module('copay')
|
||||
.module('copayApp')
|
||||
.config(function($routeProvider) {
|
||||
|
||||
$routeProvider
|
||||
|
@ -56,7 +56,7 @@ angular
|
|||
|
||||
//Setting HTML5 Location Mode
|
||||
angular
|
||||
.module('copay')
|
||||
.module('copayApp')
|
||||
.config(function($locationProvider) {
|
||||
$locationProvider
|
||||
.html5Mode(false);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.controllerUtils')
|
||||
angular.module('copayApp.services')
|
||||
.factory('controllerUtils', function($rootScope, $sce, $location, $notification, Socket, video) {
|
||||
var root = {};
|
||||
var bitcore = require('bitcore');
|
||||
|
@ -100,7 +100,6 @@ angular.module('copay.controllerUtils')
|
|||
};
|
||||
|
||||
root.updateBalance = function(cb) {
|
||||
console.log('Updating balance...');
|
||||
var w = $rootScope.wallet;
|
||||
|
||||
$rootScope.balanceByAddr = {};
|
||||
|
@ -132,7 +131,6 @@ angular.module('copay.controllerUtils')
|
|||
if (!w) return;
|
||||
opts = opts || {};
|
||||
|
||||
console.log('## updating tx proposals', opts); //TODO
|
||||
var myCopayerId = w.getMyCopayerId();
|
||||
var pendingForUs = 0;
|
||||
var inT = w.getTxProposals().sort(function(t1, t2) { return t1.createdTs < t2.createdTs });
|
||||
|
@ -150,7 +148,6 @@ angular.module('copay.controllerUtils')
|
|||
i.isPending=1;
|
||||
}
|
||||
if (!opts.onlyPending || i.isPending) {
|
||||
console.log('tx:',i); //TODO
|
||||
var tx = i.builder.build();
|
||||
var outs = [];
|
||||
tx.outs.forEach(function(o) {
|
||||
|
@ -175,7 +172,6 @@ angular.module('copay.controllerUtils')
|
|||
$rootScope.txAlertCount = pendingForUs;
|
||||
}
|
||||
$rootScope.pendingTxCount = pendingForUs;
|
||||
console.log('## Done updating tx proposals'); //TODO
|
||||
};
|
||||
|
||||
root.setSocketHandlers = function() {
|
||||
|
@ -191,12 +187,10 @@ angular.module('copay.controllerUtils')
|
|||
newAddrs.push(a);
|
||||
}
|
||||
for (var i = 0; i < newAddrs.length; i++) {
|
||||
console.log('### SUBSCRIBE TO', newAddrs[i]);
|
||||
Socket.emit('subscribe', newAddrs[i]);
|
||||
}
|
||||
newAddrs.forEach(function(addr) {
|
||||
Socket.on(addr, function(txid) {
|
||||
console.log('Received!', txid);
|
||||
$rootScope.receivedFund = [txid, addr];
|
||||
root.updateBalance(function(){
|
||||
$rootScope.$digest();
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
angular.module('notifications', []).
|
||||
factory('$notification', ['$timeout',function($timeout){
|
||||
|
||||
// console.log('notification service online');
|
||||
var notifications = JSON.parse(localStorage.getItem('$notifications')) || [],
|
||||
queue = [];
|
||||
|
||||
|
@ -76,7 +75,6 @@ angular.module('notifications', []).
|
|||
|
||||
requestHtml5ModePermissions: function(){
|
||||
if (window.webkitNotifications){
|
||||
console.log('notifications are available');
|
||||
if (window.webkitNotifications.checkPermission() === 0) {
|
||||
return true;
|
||||
}
|
||||
|
@ -93,7 +91,6 @@ angular.module('notifications', []).
|
|||
}
|
||||
}
|
||||
else{
|
||||
console.log('notifications are not supported');
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
@ -113,12 +110,10 @@ angular.module('notifications', []).
|
|||
/* ============== NOTIFICATION METHODS ==============*/
|
||||
|
||||
info: function(title, content, userData){
|
||||
console.log(title, content);
|
||||
return this.awesomeNotify('info','loop', title, content, userData);
|
||||
},
|
||||
|
||||
funds: function(title, content, userData){
|
||||
console.log(title, content);
|
||||
return this.awesomeNotify('funds','bitcoin', title, content, userData);
|
||||
},
|
||||
|
||||
|
@ -168,9 +163,9 @@ angular.module('notifications', []).
|
|||
|
||||
if(settings.html5Mode){
|
||||
html5Notify(image, title, content, function(){
|
||||
console.log("inner on display function");
|
||||
// inner on display function
|
||||
}, function(){
|
||||
console.log("inner on close function");
|
||||
// inner on close function
|
||||
});
|
||||
}
|
||||
else{
|
||||
|
@ -190,11 +185,9 @@ angular.module('notifications', []).
|
|||
|
||||
save: function(){
|
||||
// Save all the notifications into localStorage
|
||||
// console.log(JSON);
|
||||
if(settings.localStorage){
|
||||
localStorage.setItem('$notifications', JSON.stringify(notifications));
|
||||
}
|
||||
// console.log(localStorage.getItem('$notifications'));
|
||||
},
|
||||
|
||||
restore: function(){
|
||||
|
@ -218,7 +211,6 @@ angular.module('notifications', []).
|
|||
* Finally, the directive should have its own controller for
|
||||
* handling all of the notifications from the notification service
|
||||
*/
|
||||
// console.log('this is a new directive');
|
||||
var html =
|
||||
'<div class="dr-notification-wrapper" ng-repeat="noti in queue">' +
|
||||
'<div class="dr-notification-close-btn" ng-click="removeNotification(noti)">' +
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.passphrase').value('Passphrase', new copay.Passphrase(config.passphrase));
|
||||
angular.module('copayApp.services')
|
||||
.value('Passphrase', new copay.Passphrase(config.passphrase));
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.socket').factory('Socket',
|
||||
angular.module('copayApp.services').factory('Socket',
|
||||
function($rootScope) {
|
||||
var listeners = [];
|
||||
var url = 'http://' + config.socket.host + ':' + config.socket.port;
|
||||
|
|
|
@ -69,11 +69,9 @@ Video.prototype._addCall = function(mediaConnection, cb) {
|
|||
});
|
||||
|
||||
mediaConnection.on('close', function() {
|
||||
console.log('Media connection closed with ' + peerID);
|
||||
cb(true, peerID, null); // ask to stop video streaming in UI
|
||||
});
|
||||
mediaConnection.on('error', function(e) {
|
||||
console.log('Media connection error with ' + peerID);
|
||||
cb(e, peerID, null);
|
||||
});
|
||||
this.mediaConnections[peerID] = mediaConnection;
|
||||
|
@ -93,4 +91,4 @@ Video.prototype.close = function() {
|
|||
this.mediaConnections = {};
|
||||
};
|
||||
|
||||
angular.module('copay.video').value('video', new Video());
|
||||
angular.module('copayApp.services').value('video', new Video());
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copay.walletFactory').value('walletFactory', new copay.WalletFactory(config, copay.version));
|
||||
angular.module('copayApp.services').value('walletFactory', new copay.WalletFactory(config, copay.version));
|
||||
|
||||
|
|
|
@ -47,8 +47,6 @@ module.exports = function(config) {
|
|||
//Mocha stuff
|
||||
'test/mocha.conf.js',
|
||||
|
||||
//test files
|
||||
'test/unit/**/*.js',
|
||||
|
||||
//App-specific Code
|
||||
'js/app.js',
|
||||
|
@ -57,7 +55,11 @@ module.exports = function(config) {
|
|||
'js/filters.js',
|
||||
'js/services/*.js',
|
||||
'js/controllers/*.js',
|
||||
'js/init.js'
|
||||
'js/init.js',
|
||||
|
||||
|
||||
//test files
|
||||
'test/unit/**/*.js'
|
||||
],
|
||||
|
||||
|
||||
|
|
|
@ -3,39 +3,59 @@
|
|||
//
|
||||
describe("Unit: Testing Controllers", function() {
|
||||
|
||||
beforeEach(angular.mock.module('copay'));
|
||||
beforeEach(module('notifications'));
|
||||
beforeEach(module('copayApp.services'));
|
||||
beforeEach(module('copayApp.controllers'));
|
||||
|
||||
it('should have a AddressesController controller', function() {
|
||||
expect(copayApp.AddressesController).not.to.equal(null);
|
||||
var scope, addressCtrl;
|
||||
//
|
||||
beforeEach(inject(function($controller, $rootScope) {
|
||||
scope = $rootScope.$new();
|
||||
addressCtrl = $controller('AddressesController', {
|
||||
$scope: scope,
|
||||
});
|
||||
|
||||
it('should have a BackupController controller', function() {
|
||||
expect(copayApp.Backupcontroller).not.to.equal(null);
|
||||
});
|
||||
|
||||
it('should have a HeaderController controller', function() {
|
||||
expect(copayApp.HeaderController).not.to.equal(null);
|
||||
});
|
||||
|
||||
it('should have a SendController controller', function() {
|
||||
expect(copayApp.SendController).not.to.equal(null);
|
||||
});
|
||||
|
||||
it('should have a SetupController controller', function() {
|
||||
expect(copayApp.SetupController).not.to.equal(null);
|
||||
});
|
||||
|
||||
it('should have a SigninController controller', function() {
|
||||
expect(copayApp.SigninController).not.to.equal(null);
|
||||
});
|
||||
|
||||
it('should have a TransactionsController controller', function() {
|
||||
expect(copayApp.TransactionsController).not.to.equal(null);
|
||||
});
|
||||
|
||||
beforeEach(angular.mock.module('copay.walletFactory'));
|
||||
it('should display a link to create a new wallet if no wallets in localStorage', inject(function(walletFactory) {
|
||||
expect(walletFactory.storage.getWalletIds()).to.be.empty;
|
||||
}));
|
||||
|
||||
|
||||
|
||||
it('should have a AddressesController controller', function() {
|
||||
expect(scope.loading).equal(false);
|
||||
});
|
||||
|
||||
it('selectedAddr should modify scope', function() {
|
||||
expect(scope.selectedAddress).equal(undefined);
|
||||
scope.selectAddress('hola');
|
||||
expect(scope.selectedAddr).equal('hola');
|
||||
});
|
||||
|
||||
//
|
||||
// it('should have a BackupController controller', function() {
|
||||
// expect(copayApp.Backupcontroller).not.to.equal(null);
|
||||
// });
|
||||
//
|
||||
// it('should have a HeaderController controller', function() {
|
||||
// expect(copayApp.HeaderController).not.to.equal(null);
|
||||
// });
|
||||
//
|
||||
// it('should have a SendController controller', function() {
|
||||
// expect(copayApp.SendController).not.to.equal(null);
|
||||
// });
|
||||
//
|
||||
// it('should have a SetupController controller', function() {
|
||||
// expect(copayApp.SetupController).not.to.equal(null);
|
||||
// });
|
||||
//
|
||||
// it('should have a SigninController controller', function() {
|
||||
// expect(copayApp.SigninController).not.to.equal(null);
|
||||
// console.log('[controllersSpec.js.30:copayApp:]',copayApp); //TODO
|
||||
// });
|
||||
//
|
||||
// it('should have a TransactionsController controller', function() {
|
||||
// expect(copayApp.TransactionsController).not.to.equal(null);
|
||||
// });
|
||||
//
|
||||
// beforeEach(angular.mock.module('copay.walletFactory'));
|
||||
// it('should display a link to create a new wallet if no wallets in localStorage', inject(function(walletFactory) {
|
||||
// expect(walletFactory.storage.getWalletIds()).to.be.empty;
|
||||
// }));
|
||||
});
|
||||
|
|
|
@ -6,7 +6,7 @@ describe("Unit: Testing Directives", function() {
|
|||
|
||||
var $scope, form;
|
||||
|
||||
beforeEach(module('copay.directives'));
|
||||
beforeEach(module('copayApp.directives'));
|
||||
|
||||
describe('Validate Address', function() {
|
||||
beforeEach(inject(function($compile, $rootScope) {
|
||||
|
|
|
@ -3,22 +3,19 @@
|
|||
//
|
||||
describe("Unit: Testing Services", function() {
|
||||
|
||||
beforeEach(angular.mock.module('copay.socket'));
|
||||
beforeEach(angular.mock.module('copayApp.services'));
|
||||
|
||||
it('should contain a Socket service', inject(function(Socket) {
|
||||
expect(Socket).not.to.equal(null);
|
||||
}));
|
||||
|
||||
|
||||
beforeEach(angular.mock.module('copay.walletFactory'));
|
||||
|
||||
it('should contain a walletFactory service', inject(function(walletFactory) {
|
||||
expect(walletFactory).not.to.equal(null);
|
||||
}));
|
||||
|
||||
|
||||
// TODO
|
||||
/*beforeEach(angular.mock.module('copay.controllerUtils'));
|
||||
/*beforeEach(angular.mock.module('copayApp.controllerUtils'));
|
||||
|
||||
it('should contain a controllerUtils service', inject(function(controllerUtils) {
|
||||
expect(controllerUtils).not.to.equal(null);
|
||||
|
|
Loading…
Reference in New Issue