Adds bitcoin cash support for the address book
This commit is contained in:
parent
881679cd48
commit
c9253c44f3
3 changed files with 55 additions and 14 deletions
|
|
@ -1,11 +1,23 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('addressbookViewController', function($scope, $state, $timeout, $stateParams, lodash, addressbookService, popupService, $ionicHistory, platformInfo, gettextCatalog) {
|
angular.module('copayApp.controllers').controller('addressbookViewController', function($scope, $state, $timeout, lodash, addressbookService, popupService, $ionicHistory, platformInfo, gettextCatalog, bitcoreCash) {
|
||||||
$scope.isChromeApp = platformInfo.isChromeApp;
|
$scope.isChromeApp = platformInfo.isChromeApp;
|
||||||
$scope.addressbookEntry = {};
|
$scope.addressbookEntry = {};
|
||||||
$scope.addressbookEntry.name = $stateParams.name;
|
var coin;
|
||||||
$scope.addressbookEntry.email = $stateParams.email;
|
|
||||||
$scope.addressbookEntry.address = $stateParams.address;
|
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||||
|
$scope.addressbookEntry = {};
|
||||||
|
$scope.addressbookEntry.name = data.stateParams.name;
|
||||||
|
$scope.addressbookEntry.email = data.stateParams.email;
|
||||||
|
$scope.addressbookEntry.address = data.stateParams.address;
|
||||||
|
|
||||||
|
var cashAddress = bitcoreCash.Address.isValid($scope.addressbookEntry.address, 'livenet');
|
||||||
|
if (cashAddress) {
|
||||||
|
coin = 'bch';
|
||||||
|
} else {
|
||||||
|
coin = 'btc';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
$scope.sendTo = function() {
|
$scope.sendTo = function() {
|
||||||
$ionicHistory.removeBackView();
|
$ionicHistory.removeBackView();
|
||||||
|
|
@ -14,7 +26,8 @@ angular.module('copayApp.controllers').controller('addressbookViewController', f
|
||||||
$state.transitionTo('tabs.send.amount', {
|
$state.transitionTo('tabs.send.amount', {
|
||||||
toAddress: $scope.addressbookEntry.address,
|
toAddress: $scope.addressbookEntry.address,
|
||||||
toName: $scope.addressbookEntry.name,
|
toName: $scope.addressbookEntry.name,
|
||||||
toEmail: $scope.addressbookEntry.email
|
toEmail: $scope.addressbookEntry.email,
|
||||||
|
coin: coin
|
||||||
});
|
});
|
||||||
}, 100);
|
}, 100);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,18 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
angular.module('copayApp.directives')
|
angular.module('copayApp.directives')
|
||||||
.directive('validAddress', ['$rootScope', 'bitcore',
|
.directive('validAddress', ['$rootScope', 'bitcore', 'bitcoreCash',
|
||||||
function($rootScope, bitcore) {
|
function($rootScope, bitcore, bitcoreCash) {
|
||||||
return {
|
return {
|
||||||
require: 'ngModel',
|
require: 'ngModel',
|
||||||
link: function(scope, elem, attrs, ctrl) {
|
link: function(scope, elem, attrs, ctrl) {
|
||||||
|
// Bitcoin address
|
||||||
var URI = bitcore.URI;
|
var URI = bitcore.URI;
|
||||||
var Address = bitcore.Address
|
var Address = bitcore.Address
|
||||||
|
|
||||||
|
// Bitcoin Cash address
|
||||||
|
var URICash = bitcoreCash.URI;
|
||||||
|
var AddressCash = bitcoreCash.Address
|
||||||
|
|
||||||
var validator = function(value) {
|
var validator = function(value) {
|
||||||
|
|
||||||
// Regular url
|
// Regular url
|
||||||
|
|
@ -16,8 +22,8 @@ angular.module('copayApp.directives')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bip21 uri
|
// Bip21 uri
|
||||||
|
var uri, isAddressValidLivenet, isAddressValidTestnet;
|
||||||
if (/^bitcoin:/.test(value)) {
|
if (/^bitcoin:/.test(value)) {
|
||||||
var uri, isAddressValidLivenet, isAddressValidTestnet;
|
|
||||||
var isUriValid = URI.isValid(value);
|
var isUriValid = URI.isValid(value);
|
||||||
if (isUriValid) {
|
if (isUriValid) {
|
||||||
uri = new URI(value);
|
uri = new URI(value);
|
||||||
|
|
@ -26,6 +32,14 @@ angular.module('copayApp.directives')
|
||||||
}
|
}
|
||||||
ctrl.$setValidity('validAddress', isUriValid && (isAddressValidLivenet || isAddressValidTestnet));
|
ctrl.$setValidity('validAddress', isUriValid && (isAddressValidLivenet || isAddressValidTestnet));
|
||||||
return value;
|
return value;
|
||||||
|
} else if (/^bitcoincash:/.test(value)) {
|
||||||
|
var isUriValid = URICash.isValid(value);
|
||||||
|
if (isUriValid) {
|
||||||
|
uri = new URICash(value);
|
||||||
|
isAddressValidLivenet = AddressCash.isValid(uri.address.toString(), 'livenet')
|
||||||
|
}
|
||||||
|
ctrl.$setValidity('validAddress', isUriValid && (isAddressValidLivenet));
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof value == 'undefined') {
|
if (typeof value == 'undefined') {
|
||||||
|
|
@ -33,10 +47,11 @@ angular.module('copayApp.directives')
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Regular Address
|
// Regular Address: try Bitcoin and Bitcoin Cash
|
||||||
var regularAddressLivenet = Address.isValid(value, 'livenet');
|
var regularAddressLivenet = Address.isValid(value, 'livenet');
|
||||||
var regularAddressTestnet = Address.isValid(value, 'testnet');
|
var regularAddressTestnet = Address.isValid(value, 'testnet');
|
||||||
ctrl.$setValidity('validAddress', (regularAddressLivenet || regularAddressTestnet));
|
var regularAddressCashLivenet = AddressCash.isValid(value, 'livenet');
|
||||||
|
ctrl.$setValidity('validAddress', (regularAddressLivenet || regularAddressTestnet || regularAddressCashLivenet));
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,19 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.services').factory('addressbookService', function(bitcore, storageService, lodash) {
|
angular.module('copayApp.services').factory('addressbookService', function($log, bitcore, bitcoreCash, storageService, lodash) {
|
||||||
var root = {};
|
var root = {};
|
||||||
|
|
||||||
|
var getNetwork = function(address) {
|
||||||
|
var network;
|
||||||
|
try {
|
||||||
|
network = (new bitcore.Address(address)).network.name;
|
||||||
|
} catch(e) {
|
||||||
|
$log.error('No valid bitcoin address. Trying bitcoin cash...');
|
||||||
|
network = (new bitcoreCash.Address(address)).network.name;
|
||||||
|
}
|
||||||
|
return network;
|
||||||
|
};
|
||||||
|
|
||||||
root.get = function(addr, cb) {
|
root.get = function(addr, cb) {
|
||||||
storageService.getAddressbook('testnet', function(err, ab) {
|
storageService.getAddressbook('testnet', function(err, ab) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
@ -35,7 +46,8 @@ angular.module('copayApp.services').factory('addressbookService', function(bitco
|
||||||
};
|
};
|
||||||
|
|
||||||
root.add = function(entry, cb) {
|
root.add = function(entry, cb) {
|
||||||
var network = (new bitcore.Address(entry.address)).network.name;
|
var network = getNetwork(entry.address);
|
||||||
|
if (lodash.isEmpty(network)) return cb('Not valid bitcoin address');
|
||||||
storageService.getAddressbook(network, function(err, ab) {
|
storageService.getAddressbook(network, function(err, ab) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
if (ab) ab = JSON.parse(ab);
|
if (ab) ab = JSON.parse(ab);
|
||||||
|
|
@ -53,7 +65,8 @@ angular.module('copayApp.services').factory('addressbookService', function(bitco
|
||||||
};
|
};
|
||||||
|
|
||||||
root.remove = function(addr, cb) {
|
root.remove = function(addr, cb) {
|
||||||
var network = (new bitcore.Address(addr)).network.name;
|
var network = getNetwork(addr);
|
||||||
|
if (lodash.isEmpty(network)) return cb('Not valid bitcoin address');
|
||||||
storageService.getAddressbook(network, function(err, ab) {
|
storageService.getAddressbook(network, function(err, ab) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
if (ab) ab = JSON.parse(ab);
|
if (ab) ab = JSON.parse(ab);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue