From a152901a499b9768fdffb21f9fcdfc00eb483aa6 Mon Sep 17 00:00:00 2001 From: Etienne Dusseault Date: Tue, 22 Sep 2020 10:47:52 +0800 Subject: [PATCH] Fix wallet_scanQRCode rpc method (#1758) * browser tab: fix wallet_scanQRCode rpc method: wrap in a promise * BrowserTab: implement regex for scanQRCode * BrowserTab: return promise in wallet_scanQRCode --- app/components/Views/BrowserTab/index.js | 39 ++++++++++++++---------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/app/components/Views/BrowserTab/index.js b/app/components/Views/BrowserTab/index.js index ff7a755dac0..4c06b1c3fb9 100644 --- a/app/components/Views/BrowserTab/index.js +++ b/app/components/Views/BrowserTab/index.js @@ -639,22 +639,30 @@ export class BrowserTab extends PureComponent { res.result = `MetaMask/${this.props.app_version}/Beta/Mobile`; }, - wallet_scanQRCode: async () => { - this.props.navigation.navigate('QRScanner', { - onScanSuccess: data => { - let result = data; - if (data.target_address) { - result = data.target_address; - } else if (data.scheme) { - result = JSON.stringify(data); + wallet_scanQRCode: () => + new Promise((resolve, reject) => { + this.props.navigation.navigate('QRScanner', { + onScanSuccess: data => { + const regex = new RegExp(req.params[0]); + if (regex && !regex.exec(data)) { + reject({ message: 'NO_REGEX_MATCH', data }); + } else if (!regex && !/^(0x){1}[0-9a-fA-F]{40}$/i.exec(data.target_address)) { + reject({ message: 'INVALID_ETHEREUM_ADDRESS', data: data.target_address }); + } + let result = data; + if (data.target_address) { + result = data.target_address; + } else if (data.scheme) { + result = JSON.stringify(data); + } + res.result = result; + resolve(); + }, + onScanError: e => { + throw ethErrors.rpc.internal(e.toString()); } - res.result = result; - }, - onScanError: e => { - throw ethErrors.rpc.internal(e.toString()); - } - }); - }, + }); + }), wallet_watchAsset: async () => { const { @@ -674,7 +682,6 @@ export class BrowserTab extends PureComponent { if (!this.isHomepage()) { throw ethErrors.provider.unauthorized('Forbidden.'); } - Alert.alert(strings('browser.remove_bookmark_title'), strings('browser.remove_bookmark_msg'), [ { text: strings('browser.cancel'),