From 9bed4239da665e447ac2f0e2c04a1aad8cb12b22 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Wed, 29 Aug 2018 09:54:04 +1200 Subject: [PATCH] Grouped the output. --- src/js/services/bitcoin-uri.service.js | 56 +++++++++------- src/js/services/bitcoin-uri.service.spec.js | 72 ++++++++++----------- 2 files changed, 69 insertions(+), 59 deletions(-) diff --git a/src/js/services/bitcoin-uri.service.js b/src/js/services/bitcoin-uri.service.js index 28e1421e3..fd5c5d70f 100644 --- a/src/js/services/bitcoin-uri.service.js +++ b/src/js/services/bitcoin-uri.service.js @@ -105,26 +105,29 @@ returns: { - address: '', amount: '', coin: '', copayInvitation: '', - encryptedPrivateKey: '', isValid: false, label: '', - legacyAddress: '', message: '', other: { somethingIDontUnderstand: 'Its value' }, + privateKey: { + encrypted: '', + wif: '' + }'', + publicAddress: { + asReceived: '', + legacy: '', + }, req: { - "req-param0": "", - "req-param1": "" + "req-param0": '', + "req-param1": '' }, testnet: false, - url: '', - wifPrivateKey: '' - + url: '' // For BIP70 } // Need to do testnet, and copay too @@ -249,8 +252,6 @@ if (address) { var addressLowerCase = address.toLowerCase(); - // Just a rough validation to exclude half-pasted addresses, or things obviously not bitcoin addresses - //var cashAddrRe = /^((?:q|p)[a-z0-9]{41})|((?:Q|P)[A-Z0-9]{41})$/; var copayInvitationRe = /^[0-9A-HJ-NP-Za-km-z]{70,80}$/; //var legacyRe = /^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$/; //var legacyTestnetRe = /^[mn][a-km-zA-HJ-NP-Z1-9]{25,34}$/; @@ -268,32 +269,43 @@ if (parsed.testnet && cashAddrTestnet) { parsed.address = addressLowerCase; parsed.coin = 'bch'; - parsed.legacyAddress = cashAddrTestnet.toString(); + parsed.publicAddress = { + asReceived: addressLowerCase, + legacy: cashAddrTestnet.toString() + }; parsed.isValid = true; } else if (cashAddrMainnet) { - parsed.address = addressLowerCase; parsed.coin = 'bch'; - parsed.legacyAddress = cashAddrMainnet.toString(); + parsed.publicAddress = { + asReceived: addressLowerCase, + legacy: cashAddrMainnet.toString() + }; parsed.testnet = false; parsed.isValid = true; } else if (bitcore.Address.isValid(address, 'livenet')) { - parsed.address = address; - parsed.legacyAddress = address; + parsed.publicAddress = { + asReceived: address, + legacy: address + }; parsed.testnet = false; parsed.isValid = true; } else if (bitcore.Address.isValid(address, 'testnet')) { - parsed.address = address; - parsed.legacyAddress = address; + parsed.publicAddress = { + asReceived: address, + legacy: address + }; parsed.testnet = true; parsed.isValid = true; } else if (bitpayAddrMainnet) { - parsed.address = address; parsed.coin = 'bch'; - parsed.legacyAddress = bitpayAddrMainnet.toString(); + parsed.publicAddress = { + asReceived: address, + legacy: bitpayAddrMainnet.toString() + }; parsed.testnet = false; parsed.isValid = true; @@ -305,7 +317,7 @@ privateKey = address; try { new bitcore.PrivateKey(privateKey, 'livenet'); - parsed.wifPrivateKey = privateKey; + parsed.privateKey = { wif: privateKey }; parsed.testnet = false; parsed.isValid = true; } catch (e) {} @@ -314,13 +326,13 @@ privateKey = address; try { new bitcore.PrivateKey(privateKey, 'testnet'); - parsed.wifPrivateKey = privateKey; + parsed.privateKey = { wif: privateKey }; parsed.testnet = true; parsed.isValid = true; } catch (e) {} } else if (privateKeyEncryptedRe.test(address)) { - parsed.encryptedPrivateKey = address; + parsed.privateKey = { encrypted: address }; parsed.isValid = true; } diff --git a/src/js/services/bitcoin-uri.service.spec.js b/src/js/services/bitcoin-uri.service.spec.js index bd2c6f2fb..da2d25876 100644 --- a/src/js/services/bitcoin-uri.service.spec.js +++ b/src/js/services/bitcoin-uri.service.spec.js @@ -17,10 +17,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoin:?r=https://bitpay.com/i/CwzbKP3k3JNgXJBfuoerDr'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBeUndefined(); expect(parsed.coin).toBe('btc'); - expect(parsed.legacyAddress).toBeUndefined(); expect(parsed.testnet).toBeUndefined(); + expect(parsed.publicAddress).toBeUndefined(); expect(parsed.url).toBe('https://bitpay.com/i/CwzbKP3k3JNgXJBfuoerDr'); }); @@ -29,9 +28,8 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoincash:?r=https://bitpay.com/i/SmHdie5dvBnG5kouZzEPzu'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBeUndefined(); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBeUndefined(); + expect(parsed.publicAddress).toBeUndefined(); expect(parsed.testnet).toBeUndefined(); expect(parsed.url).toBe('https://bitpay.com/i/SmHdie5dvBnG5kouZzEPzu'); }); @@ -41,9 +39,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoincash:1G9FA9fFnHfTYxvmXeAbBD9FwzPAVMbd3j'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('1G9FA9fFnHfTYxvmXeAbBD9FwzPAVMbd3j'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('1G9FA9fFnHfTYxvmXeAbBD9FwzPAVMbd3j'); + expect(parsed.publicAddress.asReceived).toBe('1G9FA9fFnHfTYxvmXeAbBD9FwzPAVMbd3j'); + expect(parsed.publicAddress.legacy).toBe('1G9FA9fFnHfTYxvmXeAbBD9FwzPAVMbd3j'); expect(parsed.testnet).toBe(false); }); @@ -52,9 +50,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoincash:mkDQrKfSFD441JxrD1iPBsJFExgkvrPGQn'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('mkDQrKfSFD441JxrD1iPBsJFExgkvrPGQn'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('mkDQrKfSFD441JxrD1iPBsJFExgkvrPGQn'); + expect(parsed.publicAddress.asReceived).toBe('mkDQrKfSFD441JxrD1iPBsJFExgkvrPGQn'); + expect(parsed.publicAddress.legacy).toBe('mkDQrKfSFD441JxrD1iPBsJFExgkvrPGQn'); expect(parsed.testnet).toBe(true); }); @@ -63,11 +61,11 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoincash:qr8v2vqnzntykakht43rqmxq8cdjzjp795fc3vsjgc?unknown=something&mystery=Melton%20probang&req-one=ichi&req-beta=Ni%20san'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('qr8v2vqnzntykakht43rqmxq8cdjzjp795fc3vsjgc'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('1KrJRNApaAKRvHL5kDtL69nwmAJ31apAnu'); expect(parsed.others.mystery).toBe('Melton probang'); expect(parsed.others.unknown).toBe('something'); + expect(parsed.publicAddress.asReceived).toBe('qr8v2vqnzntykakht43rqmxq8cdjzjp795fc3vsjgc'); + expect(parsed.publicAddress.legacy).toBe('1KrJRNApaAKRvHL5kDtL69nwmAJ31apAnu'); expect(parsed.req['req-beta']).toBe('Ni san'); expect(parsed.req['req-one']).toBe('ichi'); expect(parsed.testnet).toBe(false); @@ -86,9 +84,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); expect(parsed.coin).toBeUndefined(); - expect(parsed.legacyAddress).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); + expect(parsed.publicAddress.asReceived).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); + expect(parsed.publicAddress.legacy).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); expect(parsed.testnet).toBe(true); }); @@ -97,9 +95,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); expect(parsed.coin).toBeUndefined(); - expect(parsed.legacyAddress).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); + expect(parsed.publicAddress.asReceived).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); + expect(parsed.publicAddress.legacy).toBe('mtWcoToWhbtPoCby5fvs8xdBujT5GGenD4'); expect(parsed.testnet).toBe(true); }); @@ -108,9 +106,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoin:15yCdKWVKRvfXMJpPYZBqMhiGKwjKzZdLN'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('15yCdKWVKRvfXMJpPYZBqMhiGKwjKzZdLN'); expect(parsed.coin).toBe('btc'); - expect(parsed.legacyAddress).toBe('15yCdKWVKRvfXMJpPYZBqMhiGKwjKzZdLN'); + expect(parsed.publicAddress.asReceived).toBe('15yCdKWVKRvfXMJpPYZBqMhiGKwjKzZdLN'); + expect(parsed.publicAddress.legacy).toBe('15yCdKWVKRvfXMJpPYZBqMhiGKwjKzZdLN'); expect(parsed.testnet).toBe(false); }); @@ -119,10 +117,10 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoin:1MxudKDEBWZ1yjizUSf6htacenNtb3DWbT?label=Mr.%20Smith'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('1MxudKDEBWZ1yjizUSf6htacenNtb3DWbT'); expect(parsed.coin).toBe('btc'); expect(parsed.label).toBe('Mr. Smith'); - expect(parsed.legacyAddress).toBe('1MxudKDEBWZ1yjizUSf6htacenNtb3DWbT'); + expect(parsed.publicAddress.asReceived).toBe('1MxudKDEBWZ1yjizUSf6htacenNtb3DWbT'); + expect(parsed.publicAddress.legacy).toBe('1MxudKDEBWZ1yjizUSf6htacenNtb3DWbT'); expect(parsed.testnet).toBe(false); }); @@ -132,10 +130,10 @@ fdescribe('bitcoinUriService', function() { expect(parsed.isValid).toBe(true); expect(parsed.amount).toBe('20.3'); - expect(parsed.address).toBe('12nCRhMDfxVnuF3uYMXv2fNxBohNmacfWu'); expect(parsed.coin).toBe('btc'); expect(parsed.label).toBe('Luke-Jr'); - expect(parsed.legacyAddress).toBe('12nCRhMDfxVnuF3uYMXv2fNxBohNmacfWu'); + expect(parsed.publicAddress.asReceived).toBe('12nCRhMDfxVnuF3uYMXv2fNxBohNmacfWu'); + expect(parsed.publicAddress.legacy).toBe('12nCRhMDfxVnuF3uYMXv2fNxBohNmacfWu'); expect(parsed.message).toBe('Donation for project xyz'); expect(parsed.testnet).toBe(false); }); @@ -145,9 +143,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('CJoRov8TirekvajiimQpb5Hk95evA7H2Yz'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('CJoRov8TirekvajiimQpb5Hk95evA7H2Yz'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('13LYEsnPqogE2SqJ325u1ZfiWxSWEo6uyo'); + expect(parsed.publicAddress.asReceived).toBe('CJoRov8TirekvajiimQpb5Hk95evA7H2Yz'); + expect(parsed.publicAddress.legacy).toBe('13LYEsnPqogE2SqJ325u1ZfiWxSWEo6uyo'); expect(parsed.testnet).toBe(false); }); @@ -156,9 +154,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('1JXeGEu7bNEAYu6URT6dU6g1Ys6ffSAWYW'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('1JXeGEu7bNEAYu6URT6dU6g1Ys6ffSAWYW'); expect(parsed.coin).toBeUndefined(); - expect(parsed.legacyAddress).toBe('1JXeGEu7bNEAYu6URT6dU6g1Ys6ffSAWYW'); + expect(parsed.publicAddress.asReceived).toBe('1JXeGEu7bNEAYu6URT6dU6g1Ys6ffSAWYW'); + expect(parsed.publicAddress.legacy).toBe('1JXeGEu7bNEAYu6URT6dU6g1Ys6ffSAWYW'); expect(parsed.testnet).toBe(false); }); @@ -167,9 +165,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bchtest:qpcz6pmurq9ctg5848trzz9zmuuygj4q5qam7ph3gt'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('qpcz6pmurq9ctg5848trzz9zmuuygj4q5qam7ph3gt'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('mqk5vE278ytt6LUZqd97wi8c3FHsSYREX4'); + expect(parsed.publicAddress.asReceived).toBe('qpcz6pmurq9ctg5848trzz9zmuuygj4q5qam7ph3gt'); + expect(parsed.publicAddress.legacy).toBe('mqk5vE278ytt6LUZqd97wi8c3FHsSYREX4'); expect(parsed.testnet).toBe(true); }); @@ -178,9 +176,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('BITCOINCASH:QZZG9NMC5VX8GAP6XFATX3TWNSDN2YRMCSSULSMY44'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('qzzg9nmc5vx8gap6xfatx3twnsdn2yrmcssulsmy44'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('1D5euC1yUbHiNpXreQrUUYt7LNevD3cviR'); + expect(parsed.publicAddress.asReceived).toBe('qzzg9nmc5vx8gap6xfatx3twnsdn2yrmcssulsmy44'); + expect(parsed.publicAddress.legacy).toBe('1D5euC1yUbHiNpXreQrUUYt7LNevD3cviR'); expect(parsed.testnet).toBe(false); }); @@ -189,9 +187,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('bitcoincash:qrq9p82a247lecv08ldk5p5h6ahtnjzpqcnh8yhq92'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('qrq9p82a247lecv08ldk5p5h6ahtnjzpqcnh8yhq92'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('1JXsK3HSFqoMnwh4Mevf5bTgqPcgNWX7ic'); + expect(parsed.publicAddress.asReceived).toBe('qrq9p82a247lecv08ldk5p5h6ahtnjzpqcnh8yhq92'); + expect(parsed.publicAddress.legacy).toBe('1JXsK3HSFqoMnwh4Mevf5bTgqPcgNWX7ic'); expect(parsed.testnet).toBe(false); }); @@ -200,9 +198,9 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('qqen2y3l28dpk0dzsag8w027ds96u7z4pc0uxtl0nq'); expect(parsed.isValid).toBe(true); - expect(parsed.address).toBe('qqen2y3l28dpk0dzsag8w027ds96u7z4pc0uxtl0nq'); expect(parsed.coin).toBe('bch'); - expect(parsed.legacyAddress).toBe('15fm3EwqgBYcxkndALBfforueps5yWKReJ'); + expect(parsed.publicAddress.asReceived).toBe('qqen2y3l28dpk0dzsag8w027ds96u7z4pc0uxtl0nq'); + expect(parsed.publicAddress.legacy).toBe('15fm3EwqgBYcxkndALBfforueps5yWKReJ'); expect(parsed.testnet).toBe(false); }); @@ -245,7 +243,7 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('6PRN5nEDmX842gsBzJryPu8Tw5kcsaQq1GPLcjVQPcEStvbFAtz11JX9pX'); expect(parsed.isValid).toBe(true); - expect(parsed.encryptedPrivateKey).toBe('6PRN5nEDmX842gsBzJryPu8Tw5kcsaQq1GPLcjVQPcEStvbFAtz11JX9pX'); + expect(parsed.privateKey.encrypted).toBe('6PRN5nEDmX842gsBzJryPu8Tw5kcsaQq1GPLcjVQPcEStvbFAtz11JX9pX'); }); it('private key for compressed pubkey mainnet', function() { @@ -253,7 +251,7 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'); expect(parsed.isValid).toBe(true); - expect(parsed.wifPrivateKey).toBe('5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'); + expect(parsed.privateKey.wif).toBe('5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'); expect(parsed.testnet).toBe(false); }); @@ -269,7 +267,7 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('cNJFgo1driFnPcBdBX8BrJrpxchBWXwXCvNH5SoSkdcF6JXXwHMm'); expect(parsed.isValid).toBe(true); - expect(parsed.wifPrivateKey).toBe('cNJFgo1driFnPcBdBX8BrJrpxchBWXwXCvNH5SoSkdcF6JXXwHMm'); + expect(parsed.privateKey.wif).toBe('cNJFgo1driFnPcBdBX8BrJrpxchBWXwXCvNH5SoSkdcF6JXXwHMm'); expect(parsed.testnet).toBe(true); }); @@ -285,7 +283,7 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('L18V3rAhCKEioPnJ4BHLCCsaYa8eSNFrMjNQ2EdwgeAdmBSnTMwx'); expect(parsed.isValid).toBe(true); - expect(parsed.wifPrivateKey).toBe('L18V3rAhCKEioPnJ4BHLCCsaYa8eSNFrMjNQ2EdwgeAdmBSnTMwx'); + expect(parsed.privateKey.wif).toBe('L18V3rAhCKEioPnJ4BHLCCsaYa8eSNFrMjNQ2EdwgeAdmBSnTMwx'); expect(parsed.testnet).toBe(false); }); @@ -301,7 +299,7 @@ fdescribe('bitcoinUriService', function() { var parsed = bitcoinUriService.parse('92Pg46rUhgTT7romnV7iGW6W1gbGdeezqdbJCzShkCsYNzyyNcc'); expect(parsed.isValid).toBe(true); - expect(parsed.wifPrivateKey).toBe('92Pg46rUhgTT7romnV7iGW6W1gbGdeezqdbJCzShkCsYNzyyNcc'); + expect(parsed.privateKey.wif).toBe('92Pg46rUhgTT7romnV7iGW6W1gbGdeezqdbJCzShkCsYNzyyNcc'); expect(parsed.testnet).toBe(true); });