db6f5d9036
Changelog: Rebuilt the core, provider, and application layers Changelog-Type: feat
39 lines
1.2 KiB
Dart
39 lines
1.2 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:fl_clash/common/common.dart';
|
|
import 'package:fl_clash/providers/config.dart';
|
|
import 'package:fl_clash/providers/state.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
class FlClashHttpOverrides extends HttpOverrides {
|
|
final ProviderContainer _container;
|
|
|
|
FlClashHttpOverrides(this._container);
|
|
|
|
static String findProxyFor(ProviderContainer container, Uri url) {
|
|
return findProxyForReader(container.read, url);
|
|
}
|
|
|
|
static String findProxyForReader(ProviderReader read, Uri url) {
|
|
if ([localhost].contains(url.host)) {
|
|
return 'DIRECT';
|
|
}
|
|
final isStart = read(isStartProvider);
|
|
final suspend = read(suspendProvider);
|
|
commonPrint.log('find $url proxy: $isStart');
|
|
if (!isStart || suspend) return 'DIRECT';
|
|
final mixedPort = read(
|
|
patchClashConfigProvider.select((state) => state.mixedPort),
|
|
);
|
|
return 'PROXY localhost:$mixedPort';
|
|
}
|
|
|
|
@override
|
|
HttpClient createHttpClient(SecurityContext? context) {
|
|
final client = super.createHttpClient(context);
|
|
client.badCertificateCallback = (_, _, _) => true;
|
|
client.findProxy = (url) => findProxyFor(_container, url);
|
|
return client;
|
|
}
|
|
}
|