Add proxy routing and sing-box support

This commit is contained in:
Fabian Freund
2026-05-22 18:16:31 +02:00
parent 51289f1266
commit a5974617aa
262 changed files with 32003 additions and 3962 deletions
@@ -20,7 +20,7 @@
import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:fast_equatable/fast_equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:search_backend/search_backend.dart';
import 'package:search_protocol/search_protocol.dart';
part 'web_search_settings.g.dart';
@@ -25,6 +25,7 @@ import 'package:riverpod/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:socks5_proxy/socks_client.dart';
import 'package:weblibre/features/search_credits/domain/repositories/web_search_settings.dart';
import 'package:weblibre/features/tor/domain/extensions/tor_status_x.dart';
import 'package:weblibre/features/tor/domain/services/tor_proxy.dart';
part 'proxy_client.g.dart';
@@ -39,11 +40,7 @@ int? searchProxyPort(Ref ref) {
webSearchSettingsControllerProvider.select((s) => s.routeThroughTor),
);
if (!route) return null;
final status = ref.watch(torProxyServiceProvider).value;
if (status == null || !status.isRunning || status.bootstrapProgress < 100) {
return null;
}
return status.socksPort;
return ref.watch(torProxyServiceProvider).value?.usableSocksPort;
}
/// HttpClient used by both WebSocket (via `IOWebSocketChannel.customClient`)
@@ -61,7 +61,7 @@ final class SearchProxyPortProvider
}
}
String _$searchProxyPortHash() => r'759420a65b9a1375ff9595de2a0dcbf174ae3e79';
String _$searchProxyPortHash() => r'1ca1d6f08f9eeabf2f70ce2e27b71242e0808dc0';
/// HttpClient used by both WebSocket (via `IOWebSocketChannel.customClient`)
/// and HTTP-based search clients. SOCKS5-routed when Tor toggle is on, plain
@@ -21,7 +21,7 @@ import 'package:riverpod/experimental/persist.dart';
import 'package:riverpod_annotation/experimental/json_persist.dart';
import 'package:riverpod_annotation/experimental/persist.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:search_backend/search_backend.dart';
import 'package:search_protocol/search_protocol.dart';
import 'package:weblibre/features/search_credits/data/models/web_search_settings.dart';
import 'package:weblibre/features/user/data/providers.dart';