Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions lib/data/datasources/local_sources/settings_datasource_impl.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:drift/drift.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:trusttunnel/data/database/app_database.dart' as db;
import 'package:trusttunnel/data/datasources/settings_datasource.dart';

Expand Down Expand Up @@ -38,4 +39,40 @@ class SettingsDataSourceImpl implements SettingsDataSource {
),
);
}

@override
Future<void> setPerAppProxy(bool enabled) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('per_app_proxy', enabled);
}

@override
Future<bool> getPerAppProxy() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool('per_app_proxy') ?? false;
}

@override
Future<void> setBypassApps(bool bypass) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('bypass_apps', bypass);
}

@override
Future<bool> getBypassApps() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool('bypass_apps') ?? false;
}

@override
Future<void> setProxyApps(List<String> apps) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setStringList('proxy_apps', apps);
}

@override
Future<List<String>> getProxyApps() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getStringList('proxy_apps') ?? [];
}
}
24 changes: 21 additions & 3 deletions lib/data/datasources/native_sources/vpn_datasource_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:trusttunnel/common/extensions/model_extensions.dart';
import 'package:trusttunnel/common/utils/upstream_protocol_encoder.dart';
import 'package:trusttunnel/common/utils/validation_utils.dart';
import 'package:trusttunnel/common/utils/vpn_mode_encoder.dart';
import 'package:trusttunnel/data/datasources/settings_datasource.dart';
import 'package:trusttunnel/data/datasources/vpn_datasource.dart';
import 'package:trusttunnel/data/model/routing_mode.dart';
import 'package:trusttunnel/data/model/routing_profile_data.dart';
Expand Down Expand Up @@ -33,11 +34,14 @@ import 'package:vpn_plugin/vpn_plugin.dart';
/// {@endtemplate}
class VpnDataSourceImpl implements VpnDataSource {
final VpnPlugin _platformApi;
final SettingsDataSource _settingsDataSource;

/// {@macro vpn_data_source_impl}
VpnDataSourceImpl({
required VpnPlugin vpnPlugin,
}) : _platformApi = vpnPlugin;
required SettingsDataSource settingsDataSource,
}) : _platformApi = vpnPlugin,
_settingsDataSource = settingsDataSource;

/// {@macro vpn_data_source_state_stream}
///
Expand Down Expand Up @@ -84,7 +88,7 @@ class VpnDataSourceImpl implements VpnDataSource {
required ServerData server,
required RoutingProfileData routingProfile,
required List<String> excludedRoutes,
}) {
}) async {
final exclusions = _getExclusionsByMode(routingProfile);

final endPoint = Endpoint(
Expand All @@ -106,6 +110,10 @@ class VpnDataSourceImpl implements VpnDataSource {
),
);

final perAppProxy = await _settingsDataSource.getPerAppProxy();
final bypassApps = await _settingsDataSource.getBypassApps();
final proxyApps = await _settingsDataSource.getProxyApps();

return _platformApi.start(
configuration: Configuration(
vpnMode: VpnModeEncoder().convert(
Expand All @@ -114,6 +122,9 @@ class VpnDataSourceImpl implements VpnDataSource {
endpoint: endPoint,
tun: Tun(
excludedRoutes: excludedRoutes,
perAppProxy: perAppProxy,
bypassApps: bypassApps,
proxyApps: proxyApps,
),
socks: const Socks(),
),
Expand All @@ -139,7 +150,7 @@ class VpnDataSourceImpl implements VpnDataSource {
required ServerData server,
required RoutingProfileData routingProfile,
required List<String> excludedRoutes,
}) {
}) async {
final exclusions = _getExclusionsByMode(routingProfile);

final endPoint = Endpoint(
Expand All @@ -161,6 +172,10 @@ class VpnDataSourceImpl implements VpnDataSource {
clientRandom: server.tlsPrefix ?? '',
);

final perAppProxy = await _settingsDataSource.getPerAppProxy();
final bypassApps = await _settingsDataSource.getBypassApps();
final proxyApps = await _settingsDataSource.getProxyApps();

return _platformApi.updateConfiguration(
configuration: Configuration(
vpnMode: VpnModeEncoder().convert(
Expand All @@ -169,6 +184,9 @@ class VpnDataSourceImpl implements VpnDataSource {
endpoint: endPoint,
tun: Tun(
excludedRoutes: excludedRoutes,
perAppProxy: perAppProxy,
bypassApps: bypassApps,
proxyApps: proxyApps,
),
socks: const Socks(),
),
Expand Down
9 changes: 9 additions & 0 deletions lib/data/datasources/settings_datasource.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,13 @@ abstract class SettingsDataSource {
/// Loads the currently stored excluded routes list.
/// {@endtemplate}
Future<List<String>> getExcludedRoutes();

Future<void> setPerAppProxy(bool enabled);
Future<bool> getPerAppProxy();

Future<void> setBypassApps(bool bypass);
Future<bool> getBypassApps();

Future<void> setProxyApps(List<String> apps);
Future<List<String>> getProxyApps();
}
27 changes: 27 additions & 0 deletions lib/data/repository/settings_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,15 @@ abstract class SettingsRepository {
Future<void> setExcludedRoutes(List<String> routes);

Future<List<String>> getExcludedRoutes();

Future<void> setPerAppProxy(bool enabled);
Future<bool> getPerAppProxy();

Future<void> setBypassApps(bool bypass);
Future<bool> getBypassApps();

Future<void> setProxyApps(List<String> apps);
Future<List<String>> getProxyApps();
}

class SettingsRepositoryImpl implements SettingsRepository {
Expand All @@ -20,4 +29,22 @@ class SettingsRepositoryImpl implements SettingsRepository {

@override
Future<void> setExcludedRoutes(List<String> routes) => _settingsDataSource.setExcludedRoutes(routes);

@override
Future<void> setPerAppProxy(bool enabled) => _settingsDataSource.setPerAppProxy(enabled);

@override
Future<bool> getPerAppProxy() => _settingsDataSource.getPerAppProxy();

@override
Future<void> setBypassApps(bool bypass) => _settingsDataSource.setBypassApps(bypass);

@override
Future<bool> getBypassApps() => _settingsDataSource.getBypassApps();

@override
Future<void> setProxyApps(List<String> apps) => _settingsDataSource.setProxyApps(apps);

@override
Future<List<String>> getProxyApps() => _settingsDataSource.getProxyApps();
}
5 changes: 4 additions & 1 deletion lib/di/model/dependency_factory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,10 @@ class DependencyFactoryImpl implements DependencyFactory {
);

@override
VpnDataSource get vpnDataSource => _vpnDataSource ??= VpnDataSourceImpl(vpnPlugin: vpnPlugin);
VpnDataSource get vpnDataSource => _vpnDataSource ??= VpnDataSourceImpl(
vpnPlugin: vpnPlugin,
settingsDataSource: settingsDataSource,
);

@override
CertificateDataSource get certificateDataSource => _certificateDataSource ??= CertificateDataSourceImpl(
Expand Down
Loading