This commit is contained in:
fosse 2024-01-29 20:34:48 -05:00
parent f37125efbe
commit 2cc21fce6b
4 changed files with 17 additions and 30 deletions

View file

@ -6,7 +6,6 @@ import 'package:hive/hive.dart';
import 'package:cw_core/hive_type_ids.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:http/io_client.dart' as ioc;
import 'package:tor/tor.dart';
part 'node.g.dart';
@ -220,16 +219,6 @@ class Node extends HiveObject with Keyable {
String? proxy = socksProxyAddress;
// we have to be careful here because if Tor.instance.port is called and Tor isn't enabled
// we'll create a new tor instance that just eats up memory
// we initialize tor in the tor view model first so that this doesn't happen
if (Tor.instance.port == -1) {
return false;
}
if ((proxy?.isEmpty ?? true)) {
proxy = "${InternetAddress.loopbackIPv4.address}:${Tor.instance.port}";
}
if (proxy == null) {
return false;
}

View file

@ -724,7 +724,10 @@ Future<void> setup({
getIt.registerFactory(() => TrocadorProvidersViewModel(getIt.get<SettingsStore>()));
getIt.registerSingleton(TorViewModel(getIt.get<SettingsStore>()));
getIt.registerSingleton(ProxyWrapper(settingsStore: getIt.get<SettingsStore>()));
getIt.registerSingleton(ProxyWrapper(
settingsStore: getIt.get<SettingsStore>(),
torViewModel: getIt.get<TorViewModel>(),
));
if (DeviceInfo.instance.isMobile && settingsStore.shouldStartTorOnLaunch) {
getIt.get<TorViewModel>().startTor();

View file

@ -2,6 +2,7 @@ import 'dart:io';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/view_model/settings/tor_connection.dart';
import 'package:cake_wallet/view_model/settings/tor_view_model.dart';
import 'package:socks5_proxy/socks.dart';
import 'package:tor/tor.dart';
@ -18,35 +19,28 @@ class NullOverrides extends HttpOverrides {
class ProxyWrapper {
ProxyWrapper({
this.settingsStore,
this.torViewModel,
});
SettingsStore? settingsStore;
TorViewModel? torViewModel;
HttpClient? _torClient;
// static int get port {
// if (settingsStore?.torConnectionMode == TorConnectionMode.disabled) {
// return -1;
// }
// return Tor.instance.port;
// }
// }
int getPort() {
TorConnectionMode mode = settingsStore?.torConnectionMode ?? TorConnectionMode.disabled;
if (mode == TorConnectionMode.disabled) {
return -1;
}
return Tor.instance.port;
return torViewModel?.torInstance.port ?? -1;
}
// static bool get enabled => Tor.instance.enabled;
bool started = false;
// Method to get or create the Tor proxy instance
Future<HttpClient> getProxyHttpClient({int? portOverride}) async {
portOverride = (portOverride == -1 || portOverride == null) ? Tor.instance.port : portOverride;
if (portOverride == -1 || portOverride == null) {
portOverride = torViewModel?.torInstance.port ?? -1;
}
if (!started) {
started = true;

View file

@ -29,7 +29,7 @@ abstract class TorViewModelBase with Store {
bool torStarted = false;
final SettingsStore _settingsStore;
Tor tor = Tor.instance;
Tor torInstance = Tor.instance;
@action
Future<void> updateStartOnLaunch(bool value) async {
@ -72,16 +72,17 @@ abstract class TorViewModelBase with Store {
if (!torStarted) {
torStarted = true;
tor = await Tor.init();
await Tor.instance.enable();
torInstance = await Tor.init();
}
await torInstance.enable();
_settingsStore.shouldStartTorOnLaunch = true;
SocksTCPClient.setProxy(proxies: [
ProxySettings(
InternetAddress.loopbackIPv4,
tor.port,
torInstance.port,
password: null,
),
]);
@ -97,7 +98,7 @@ abstract class TorViewModelBase with Store {
@action
Future<void> stopTor() async {
// Tor.instance.disable();// removed because we don't want to have to start tor again
torInstance.disable();
// setting the torConnectionMode to disabled will prevent anything from actually using the proxy
_settingsStore.shouldStartTorOnLaunch = false;
torConnectionStatus = TorConnectionStatus.disconnected;