var validator = function(value) { // If we're setting the domain, ignore the change. if ($rootScope.merchant && $rootScope.merchant.domain && value === $rootScope.merchant.domain) { ctrl.$setValidity('validAddress', true); return value; } // Regular url if (/^https?:\/\//.test(value)) { ctrl.$setValidity('validAddress', true); return value; } // Bip21 uri if (/^bitcoin:/.test(value)) { var uri = new bitcore.BIP21(value); var hasAddress = uri.address && uri.isValid() && uri.address.network().name === $rootScope.wallet.getNetworkName(); ctrl.$setValidity('validAddress', uri.data.merchant || hasAddress); return value; } // Regular Address var a = new Address(value); ctrl.$setValidity('validAddress', a.isValid() && a.network().name === $rootScope.wallet.getNetworkName()); return value; };
var validator = function(value) { // Regular url if (/^https?:\/\//.test(value)) { ctrl.$setValidity('validAddress', true); return value; } // Bip21 uri if (/^startcoin:/.test(value)) { var uri = new bitcore.BIP21(value); var hasAddress = uri.address && uri.isValid() && uri.address.network().name === $rootScope.wallet.getNetworkName(); ctrl.$setValidity('validAddress', uri.data.merchant || hasAddress); return value; } if (typeof value == 'undefined') { ctrl.$pristine = true; return; } // Regular Address var a = new Address(value); ctrl.$setValidity('validAddress', a.isValid() && a.network().name === $rootScope.wallet.getNetworkName()); return value; };
$scope.setFromUri = function(uri) { var form = $scope.sendForm; var parsed = new bitcore.BIP21(uri); if (!parsed.isValid() || !parsed.address.isValid()) { $scope.error = 'Invalid bitcoin URL'; form.address.$isValid = false; return uri; }; var addr = parsed.address.toString(); if (parsed.data.merchant) return $scope.setFromPayPro(parsed.data.merchant); var amount = (parsed.data && parsed.data.amount) ? (parsed.data.amount * 100000000).toFixed(0) * satToUnit : 0; $scope.setForm(addr, amount, parsed.data.message, true); return addr; };
var validator = function(value) { // Regular url if (/^https?:\/\//.test(value)) { ctrl.$setValidity('validAddress', true); return value; } // Bip21 uri if (/^bitcoin:/.test(value)) { var uri = new bitcore.BIP21(value); var hasAddress = uri.address && uri.isValid() && uri.address.network().name === config.networkName; ctrl.$setValidity('validAddress', uri.data.merchant || hasAddress); return value; } // Regular Address var a = new Address(value); ctrl.$setValidity('validAddress', a.isValid() && a.network().name === config.networkName); return value; };
$scope.setFromUri = function(uri) { function sanitizeUri(uri) { // Fixes when a region uses comma to separate decimals var regex = /[\?\&]amount=(\d+([\,\.]\d+)?)/i; var match = regex.exec(uri); if (!match || match.length === 0) { return uri; } var value = match[0].replace(',', '.'); var newUri = uri.replace(regex, value); return newUri; }; var w = $rootScope.wallet; var satToUnit = 1 / w.settings.unitToSatoshi; var form = $scope.sendForm; uri = sanitizeUri(uri); var parsed = new bitcore.BIP21(uri); if (!parsed.isValid() || !parsed.address.isValid()) { $scope.error = 'Invalid StartCOIN URL'; form.address.$isValid = false; return uri; }; var addr = parsed.address.toString(); if (parsed.data.merchant) return $scope.setFromPayPro(parsed.data.merchant); var amount = (parsed.data && parsed.data.amount) ? ((parsed.data.amount * 100000000).toFixed(0) * satToUnit).toFixed(w.settings.unitDecimals) : 0; $scope.setForm(addr, amount, parsed.data.message, true); return addr; };