feat: CakeTorSocks respect SOCKS_SERVER (#2444)

This commit is contained in:
cyan
2025-08-13 01:00:39 +03:00
committed by GitHub
parent 66adb00d16
commit b8a9863a21
8 changed files with 82 additions and 7 deletions
+1 -1
View File
@@ -100,7 +100,7 @@ class ProxyWrapper {
try {
switch (method) {
case RequestMethod.get:
resp = await client. get(
resp = await client.get(
uri,
headers: headers,
);
+26 -2
View File
@@ -3,7 +3,7 @@ import 'dart:io';
import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/utils/tor/android.dart';
import 'package:cw_core/utils/tor/disabled.dart';
import 'package:cw_core/utils/tor/tails.dart';
import 'package:cw_core/utils/tor/socks.dart';
abstract class CakeTorInstance {
bool get started;
@@ -23,11 +23,24 @@ abstract class CakeTorInstance {
}
if (Platform.isLinux) {
try {
String? socksServer;
if (Platform.environment["SOCKS_SERVER"] != null) {
socksServer = Platform.environment["SOCKS_SERVER"]!;
}
if (Platform.environment["SOCKS_PROXY"] != null) {
socksServer = Platform.environment["SOCKS_PROXY"]!;
}
if (socksServer != null) {
final uri = Uri.tryParse(socksServer);
if (uri != null) {
return CakeTorSocks(uri.port);
}
}
final os = File("/etc/os-release").readAsLinesSync();
for (var line in os) {
if (!line.startsWith("ID=")) continue;
if (!line.contains("tails")) continue;
return CakeTorTails();
return CakeTorSocks(9150);
}
} catch (e) {
printV("Failed to identify linux version - /etc/os-release missing");
@@ -35,4 +48,15 @@ abstract class CakeTorInstance {
}
return CakeTorDisabled();
}
String toString() {
return """
CakeTorInstance(
port: $port,
started: $started,
bootstrapped: $bootstrapped,
enabled: $enabled,
)
""";
}
}
+13
View File
@@ -70,4 +70,17 @@ DataDirectory ${p.join(dir.path, "tor-data")}
_proc?.stdout.transform(utf8.decoder).forEach(printV);
_proc?.stderr.transform(utf8.decoder).forEach(printV);
}
@override
String toString() {
return """
CakeTorAndroid(
port: $port,
started: $started,
bootstrapped: $bootstrapped,
enabled: $enabled,
proc: $_proc,
)
""";
}
}
+12
View File
@@ -18,4 +18,16 @@ class CakeTorDisabled implements CakeTorInstance {
@override
Future<void> stop() => throw UnimplementedError();
@override
String toString() {
return """
CakeTorDisabled(
port: $port,
started: $started,
bootstrapped: $bootstrapped,
enabled: $enabled,
)
""";
}
}
@@ -1,6 +1,7 @@
import 'package:cw_core/utils/tor/abstract.dart';
class CakeTorTails implements CakeTorInstance {
class CakeTorSocks implements CakeTorInstance {
CakeTorSocks(this.port);
@override
bool get bootstrapped => true;
@@ -8,7 +9,7 @@ class CakeTorTails implements CakeTorInstance {
bool get enabled => true;
@override
int get port => 9150;
int port;
@override
Future<void> start() async {}
@@ -18,4 +19,16 @@ class CakeTorTails implements CakeTorInstance {
@override
Future<void> stop() async {}
@override
String toString() {
return """
CakeTorSocks(
port: $port,
started: $started,
bootstrapped: $bootstrapped,
enabled: $enabled,
)
""";
}
}
+11
View File
@@ -5,8 +5,11 @@ import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/view_model/dev/network_requests_view_model.dart';
import 'package:cw_core/utils/proxy_logger/abstract.dart';
import 'package:cw_core/utils/proxy_logger/memory_proxy_logger.dart';
import 'package:cw_core/utils/proxy_wrapper.dart';
import 'package:cw_core/utils/tor/abstract.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:on_chain/solana/solana.dart';
class DevNetworkRequests extends BasePage {
final NetworkRequestsViewModel viewModel = NetworkRequestsViewModel();
@@ -120,6 +123,14 @@ class DevRequestDetails extends BasePage {
_sectionTitle("Network"),
SelectableText(req.network.toString()),
if (req.network == RequestNetwork.tor)
...[
_sectionTitle("Tor socks server"),
SelectableText(CakeTor.instance.runtimeType.toString()),
_sectionTitle("Tor socks details"),
SelectableText(CakeTor.instance.toString()),
],
_sectionTitle("Body (as UTF-8)"),
SelectableText(_tryDecodeBody(req.body)),
+3 -2
View File
@@ -1,12 +1,13 @@
import 'package:cw_core/utils/proxy_wrapper.dart';
import 'package:cw_core/utils/tor/disabled.dart';
import 'package:flutter/foundation.dart';
import 'dart:io';
class FeatureFlag {
static const bool isCakePayEnabled = false;
static const bool isCakePayRedemptionFlowEnabled = false;
static const bool isExolixEnabled = true;
static const bool isBackgroundSyncEnabled = true;
static final bool isInAppTorEnabled = (Platform.isAndroid);
static final bool isInAppTorEnabled = CakeTor.instance is! CakeTorDisabled;
static const int verificationWordsCount = kDebugMode ? 0 : 2;
static const bool hasDevOptions = bool.fromEnvironment('hasDevOptions', defaultValue: kDebugMode);
static const bool hasBitcoinViewOnly = true;
+1
View File
@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:io';
import 'package:cw_core/utils/proxy_wrapper.dart';
import 'package:cw_core/utils/print_verbose.dart';