mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-01-18 21:35:21 +01:00
ADD: isTorCapable
Removes the need to manual code adjustments on platforms that aren't compatible with react-native-tor
This commit is contained in:
parent
b50032db21
commit
308e9e1545
@ -5,11 +5,12 @@ import { LegacyWallet, SegwitBech32Wallet, SegwitP2SHWallet } from '../class';
|
||||
import DefaultPreference from 'react-native-default-preference';
|
||||
import RNWidgetCenter from 'react-native-widget-center';
|
||||
import loc from '../loc';
|
||||
import { isTorCapable } from './environment';
|
||||
const bitcoin = require('bitcoinjs-lib');
|
||||
const ElectrumClient = require('electrum-client');
|
||||
const reverse = require('buffer-reverse');
|
||||
const BigNumber = require('bignumber.js');
|
||||
const torrific = require('../blue_modules/torrific');
|
||||
const torrific = require('./torrific');
|
||||
const Realm = require('realm');
|
||||
|
||||
const ELECTRUM_HOST = 'electrum_host';
|
||||
@ -102,12 +103,13 @@ async function connectMain() {
|
||||
try {
|
||||
console.log('begin connection:', JSON.stringify(usingPeer));
|
||||
mainClient = new ElectrumClient(
|
||||
usingPeer.host.endsWith('.onion') ? torrific : global.net,
|
||||
usingPeer.host.endsWith('.onion') && isTorCapable ? torrific : global.net,
|
||||
global.tls,
|
||||
usingPeer.ssl || usingPeer.tcp,
|
||||
usingPeer.host,
|
||||
usingPeer.ssl ? 'tls' : 'tcp',
|
||||
);
|
||||
|
||||
mainClient.onError = function (e) {
|
||||
console.log('electrum mainClient.onError():', e.message);
|
||||
if (mainConnected) {
|
||||
@ -806,7 +808,7 @@ module.exports.calculateBlockTime = function (height) {
|
||||
*/
|
||||
module.exports.testConnection = async function (host, tcpPort, sslPort) {
|
||||
const client = new ElectrumClient(
|
||||
host.endsWith('.onion') ? torrific : global.net,
|
||||
host.endsWith('.onion') && isTorCapable ? torrific : global.net,
|
||||
global.tls,
|
||||
sslPort || tcpPort,
|
||||
host,
|
||||
@ -818,7 +820,7 @@ module.exports.testConnection = async function (host, tcpPort, sslPort) {
|
||||
try {
|
||||
const rez = await Promise.race([
|
||||
new Promise(resolve => {
|
||||
timeoutId = setTimeout(() => resolve('timeout'), host.endsWith('.onion') ? 21000 : 5000);
|
||||
timeoutId = setTimeout(() => resolve('timeout'), host.endsWith('.onion') && isTorCapable ? 21000 : 5000);
|
||||
}),
|
||||
client.connect(),
|
||||
]);
|
||||
|
@ -1,8 +1,20 @@
|
||||
import { Platform } from 'react-native';
|
||||
import { getSystemName, isTablet, getDeviceType } from 'react-native-device-info';
|
||||
|
||||
const isMacCatalina = getSystemName() === 'Mac OS X';
|
||||
const isDesktop = getDeviceType() === 'Desktop';
|
||||
const isTorCapable = () => {
|
||||
let capable = true;
|
||||
if (Platform.OS === 'android' && Platform.Version < 26) {
|
||||
capable = false;
|
||||
} else if (isDesktop) {
|
||||
capable = false;
|
||||
}
|
||||
return capable;
|
||||
};
|
||||
|
||||
module.exports.isMacCatalina = isMacCatalina;
|
||||
module.exports.isDesktop = getDeviceType() === 'Desktop';
|
||||
module.exports.isDesktop = isDesktop;
|
||||
module.exports.isHandset = getDeviceType() === 'Handset';
|
||||
module.exports.isTablet = isTablet;
|
||||
module.exports.isTorCapable = isTorCapable();
|
||||
|
@ -2,6 +2,7 @@ import { LegacyWallet } from './legacy-wallet';
|
||||
import Frisbee from 'frisbee';
|
||||
import bolt11 from 'bolt11';
|
||||
import { BitcoinUnit, Chain } from '../../models/bitcoinUnits';
|
||||
import { isTorCapable } from '../../blue_modules/environment';
|
||||
const torrific = require('../../blue_modules/torrific');
|
||||
|
||||
export class LightningCustodianWallet extends LegacyWallet {
|
||||
@ -72,7 +73,7 @@ export class LightningCustodianWallet extends LegacyWallet {
|
||||
baseURI: this.baseURI,
|
||||
});
|
||||
|
||||
if (this.baseURI?.indexOf('.onion') !== -1) {
|
||||
if (isTorCapable && this.baseURI?.indexOf('.onion') !== -1) {
|
||||
this._api = new torrific.Torsbee({
|
||||
baseURI: this.baseURI,
|
||||
});
|
||||
|
@ -16,6 +16,7 @@ import { BlueCurrentTheme } from '../../components/themes';
|
||||
import Notifications from '../../blue_modules/notifications';
|
||||
import { BlueStorageContext } from '../../blue_modules/storage-context';
|
||||
import { Psbt } from 'bitcoinjs-lib';
|
||||
import { isTorCapable } from '../../blue_modules/environment';
|
||||
const currency = require('../../blue_modules/currency');
|
||||
const BlueElectrum = require('../../blue_modules/BlueElectrum');
|
||||
const Bignumber = require('bignumber.js');
|
||||
@ -70,7 +71,7 @@ export default class Confirm extends Component {
|
||||
const wallet = new PayjoinTransaction(this.state.psbt, txHex => this.broadcast(txHex), this.state.fromWallet);
|
||||
const paymentScript = this.getPaymentScript();
|
||||
let payjoinClient;
|
||||
if (this.state.payjoinUrl.includes('.onion')) {
|
||||
if (isTorCapable && this.state.payjoinUrl.includes('.onion')) {
|
||||
console.warn('trying TOR....');
|
||||
const payjoinUrl = this.state.payjoinUrl;
|
||||
// working through TOR - crafting custom requester that will handle TOR http request
|
||||
|
@ -5,7 +5,7 @@ import Notifications from '../../blue_modules/notifications';
|
||||
import navigationStyle from '../../components/navigationStyle';
|
||||
import { SafeBlueArea, BlueListItem } from '../../BlueComponents';
|
||||
import loc from '../../loc';
|
||||
import { isDesktop } from '../../blue_modules/environment';
|
||||
import { isTorCapable } from '../../blue_modules/environment';
|
||||
|
||||
const NetworkSettings = () => {
|
||||
const { navigate } = useNavigation();
|
||||
@ -35,7 +35,7 @@ const NetworkSettings = () => {
|
||||
chevron
|
||||
/>
|
||||
)}
|
||||
{!isDesktop && <BlueListItem title={loc.settings.tor_settings} onPress={navigateToTorSettings} testID="TorSettings" chevron />}
|
||||
{isTorCapable && <BlueListItem title={loc.settings.tor_settings} onPress={navigateToTorSettings} testID="TorSettings" chevron />}
|
||||
</ScrollView>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
|
@ -33,7 +33,7 @@ import {
|
||||
BlueDismissKeyboardInputAccessory,
|
||||
} from '../../BlueComponents';
|
||||
import { BlueCurrentTheme } from '../../components/themes';
|
||||
import { isDesktop } from '../../blue_modules/environment';
|
||||
import { isTorCapable } from '../../blue_modules/environment';
|
||||
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
|
||||
|
||||
const BlueElectrum = require('../../blue_modules/BlueElectrum');
|
||||
@ -286,7 +286,7 @@ export default class ElectrumSettings extends Component {
|
||||
<TextInput
|
||||
placeholder={
|
||||
loc.formatString(loc.settings.electrum_host, { example: '111.222.333.111' }) +
|
||||
(!isDesktop ? ' (' + loc.settings.tor_supported + ')' : '')
|
||||
(isTorCapable ? ' (' + loc.settings.tor_supported + ')' : '')
|
||||
}
|
||||
value={this.state.host}
|
||||
onChangeText={text => this.setState({ host: text.trim() })}
|
||||
|
@ -12,7 +12,7 @@ import { LightningCustodianWallet } from '../../class/wallets/lightning-custodia
|
||||
import loc from '../../loc';
|
||||
import { BlueCurrentTheme } from '../../components/themes';
|
||||
import DeeplinkSchemaMatch from '../../class/deeplink-schema-match';
|
||||
import { isDesktop } from '../../blue_modules/environment';
|
||||
import { isTorCapable } from '../../blue_modules/environment';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
uri: {
|
||||
@ -136,7 +136,7 @@ const LightningSettings = () => {
|
||||
value={URI}
|
||||
placeholder={
|
||||
loc.formatString(loc.settings.electrum_host, { example: '111.222.333.111' }) +
|
||||
(!isDesktop ? ' (' + loc.settings.tor_supported + ')' : '')
|
||||
(isTorCapable ? ' (' + loc.settings.tor_supported + ')' : '')
|
||||
}
|
||||
onChangeText={setLndhubURI}
|
||||
numberOfLines={1}
|
||||
|
@ -14,6 +14,9 @@ const styles = StyleSheet.create({
|
||||
},
|
||||
});
|
||||
|
||||
/*
|
||||
TorSettings is not displayed in Settings menu if isTorCapable is false. No need to provide code protection.
|
||||
*/
|
||||
const TorSettings = () => {
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [daemonStatus, setDaemonStatus] = useState('');
|
||||
|
@ -1,6 +1,11 @@
|
||||
echo "Applying patch for package.json"
|
||||
sed -i '' '/react-native-tor/d' ./package.json
|
||||
rm -fr node_modules
|
||||
echo "Re-installing node_modules"
|
||||
npm i
|
||||
echo "Applying patch for react-native-xcode.sh"
|
||||
sed -i '' 's/--platform "$BUNDLE_PLATFORM"/--platform "ios"/g' ./node_modules/react-native/scripts/react-native-xcode.sh
|
||||
echo "Deleting torrific.js content"
|
||||
echo > blue_modules/torrific.js
|
||||
echo ""
|
||||
echo "react-native-tor is not currently compatible with Mac Catalyst. You will need to remove all references from torrific.js. After this, you should be able to compile BlueWallet using Mac Catalyst on XCode. If you are running macOS Catalina, you will need to remove the iOS 14 Widgets from the project targets."
|
||||
echo "NOTE: react-native-tor is not currently compatible with Mac Catalyst. If you are running macOS Catalina, you will need to remove the iOS 14 Widgets from the project targets."
|
||||
|
@ -24,6 +24,7 @@ jest.mock('react-native-device-info', () => {
|
||||
return {
|
||||
getUniqueId: jest.fn().mockReturnValue('uniqueId'),
|
||||
getSystemName: jest.fn(),
|
||||
getDeviceType: jest.fn().mockReturnValue(false),
|
||||
hasGmsSync: jest.fn().mockReturnValue(true),
|
||||
hasHmsSync: jest.fn().mockReturnValue(false),
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user