Skip to content

Commit

Permalink
Merge pull request #510 in ADGUARD-IOS/adguard-ios from enhancement/1…
Browse files Browse the repository at this point in the history
…276_3 to v3.2

* commit '0b2739af5b818a5ee151e14672d21c73ab04ec96':
  fixed
  fixed
  search added
  fix
  fix
  fix
  wifi exceptions
  insets fixed
  small fix
  system whitelist and blacklist merged
  small fixes
  wifi-exceptions screen
  changed model
  • Loading branch information
IvanIin committed Oct 28, 2019
2 parents da31bd4 + 0b2739a commit 37d14f7
Show file tree
Hide file tree
Showing 54 changed files with 5,085 additions and 2,140 deletions.
2 changes: 2 additions & 0 deletions AdguardExtension/Adguard.entitlements
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
<string>content-filter-provider</string>
<string>packet-tunnel-provider</string>
</array>
<key>com.apple.developer.networking.wifi-info</key>
<true/>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>
<key>com.apple.security.application-groups</key>
Expand Down
88 changes: 76 additions & 12 deletions AdguardExtension/Adguard.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion AdguardExtension/AdguardApp/AppDelegateHelper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ class AppDelegateHelper: NSObject {
let userFilterStoryboard = UIStoryboard(name: "UserFilter", bundle: Bundle.main)
guard let userFilterController = userFilterStoryboard.instantiateViewController(withIdentifier: "UserFilterController") as? ListOfRulesController else { return }

let model = ListOfRulesModel(listOfRulesType: .safariUserFilter, resources: self.resources, contentBlockerService: self.contentBlockerService, antibanner: antibanner, theme: self.themeService, dnsFiltersService: self.dnsFiltersService)
let model: ListOfRulesModelProtocol = UserFilterModel(resources: self.resources, contentBlockerService: self.contentBlockerService, antibanner: self.antibanner, theme: self.themeService)

userFilterController.model = model
userFilterController.newRuleText = path
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "check.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "custom.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "mobiledata.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Binary file not shown.
11 changes: 10 additions & 1 deletion AdguardExtension/AdguardApp/Services/APVPNManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#import "APSharedResources.h"



@class ASDFilterRule, DnsProviderInfo, DnsServerInfo, ConfigurationService;

/////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -103,6 +102,16 @@ extern NSString* __nonnull APVpnChangedNotification;
*/
@property (readonly) BOOL vpnInstalled;

/**
this flag indicates that filtering of Wi-Fi data is on/off
*/
@property BOOL filteringWifiDataEnabled;

/**
this flag indicates that filtering of mobile data is on/off
*/
@property BOOL filteringMobileDataEnabled;

/**
Adds custom (editable) DNS server.
Expand Down
147 changes: 130 additions & 17 deletions AdguardExtension/AdguardApp/Services/APVPNManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,16 @@ @implementation APVPNManager{
APVpnManagerTunnelMode _tunnelMode;
NSNumber *_delayedSetTunnelMode;

BOOL _delayedRestartByReachability;
BOOL _delayedRestartTunnel;
NSNumber *_delayedRestartByReachability;
BOOL _delayedRestartTunnel;
NSNumber *_delayedFilteringWifiDataEnabled;
NSNumber *_delayedFilteringMobileDataEnabled;

NSError *_standartError;

BOOL _restartByReachability;
BOOL _filteringWifiDataEnabled;
BOOL _filteringMobileDataEnabled;

NSMutableArray <DnsProviderInfo *> *_customDnsProviders;

Expand Down Expand Up @@ -142,6 +146,9 @@ - (id)initWithResources: (nonnull APSharedResources*) resources
// don't restart by default
_restartByReachability = NO;

_filteringMobileDataEnabled = YES;
_filteringWifiDataEnabled = YES;

[self loadConfiguration];
}

Expand Down Expand Up @@ -213,7 +220,6 @@ - (void)setActiveDnsServer:(DnsServerInfo *)activeDnsServer{
}

[_busyLock unlock];

}

- (NSArray<DnsProviderInfo *> *)providers {
Expand Down Expand Up @@ -308,6 +314,15 @@ - (BOOL)restartByReachability {
return _restartByReachability;
}

- (BOOL)filteringWifiDataEnabled {
return _filteringWifiDataEnabled;
}

- (BOOL)filteringMobileDataEnabled {
return _filteringMobileDataEnabled;
}


- (void)setRestartByReachability:(BOOL)restartByReachability {

_lastError = nil;
Expand All @@ -316,13 +331,13 @@ - (void)setRestartByReachability:(BOOL)restartByReachability {

if (_busy) {

_delayedRestartByReachability = restartByReachability;
_delayedRestartByReachability = @(restartByReachability);
} else {
dispatch_async(workingQueue, ^{

if (_busy) {

_delayedRestartByReachability = restartByReachability;
_delayedRestartByReachability = @(restartByReachability);
} else {

[self internalSetRestartByReachability:restartByReachability];
Expand All @@ -333,6 +348,48 @@ - (void)setRestartByReachability:(BOOL)restartByReachability {
[_busyLock unlock];
}

- (void)setFilteringWifiDataEnabled:(BOOL)filteringWifiDataEnabled {
_lastError = nil;

[_busyLock lock];

if (_busy) {
_delayedFilteringWifiDataEnabled = @(filteringWifiDataEnabled);
} else {
dispatch_async(workingQueue, ^{
if (_busy) {
_delayedFilteringWifiDataEnabled = @(filteringWifiDataEnabled);
} else {

[self internalSetFilteringWifiDataEnabled:filteringWifiDataEnabled];
}
});
}

[_busyLock unlock];
}

- (void)setFilteringMobileDataEnabled:(BOOL)filteringMobileDataEnabled {
_lastError = nil;

[_busyLock lock];

if (_busy) {
_delayedFilteringMobileDataEnabled = @(filteringMobileDataEnabled);
} else {
dispatch_async(workingQueue, ^{
if (_busy) {
_delayedFilteringMobileDataEnabled = @(filteringMobileDataEnabled);
} else {

[self internalSetFilteringMobileDataEnabled:filteringMobileDataEnabled];
}
});
}

[_busyLock unlock];
}

- (APVpnManagerTunnelMode)tunnelMode {
return _tunnelMode;
}
Expand Down Expand Up @@ -520,9 +577,7 @@ - (void)internalSetEnabled:(BOOL)enabled force:(BOOL)force{
_delayedSetEnabled = @(enabled);
return;
}


[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:_tunnelMode restartByReachability:_restartByReachability enabled:enabled];
[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:_tunnelMode restartByReachability:_restartByReachability enabled:enabled filteringMobileDataEnabled:_filteringMobileDataEnabled filteringWifiDataEnabled:_filteringWifiDataEnabled];

// If do not completely stop the tunnel in full mode, then other VPNs can not start
if(!enabled && _tunnelMode == APVpnManagerTunnelModeFull) {
Expand All @@ -546,7 +601,7 @@ - (void)internalSetRemoteServer:(DnsServerInfo *)server{
if (_enabled) {
_delayedSetEnabled = @(_enabled);
}
[self updateConfigurationForRemoteServer:server tunnelMode:_tunnelMode restartByReachability:_restartByReachability enabled:NO];
[self updateConfigurationForRemoteServer:server tunnelMode:_tunnelMode restartByReachability:_restartByReachability enabled:NO filteringMobileDataEnabled:_filteringMobileDataEnabled filteringWifiDataEnabled:_filteringWifiDataEnabled];
}
}

Expand All @@ -557,7 +612,7 @@ - (void)internalSetTunnelMode:(APVpnManagerTunnelMode)tunnelMode {
if (_enabled) {
_delayedSetEnabled = @(_enabled);
}
[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:tunnelMode restartByReachability:_restartByReachability enabled:NO];
[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:tunnelMode restartByReachability:_restartByReachability enabled:NO filteringMobileDataEnabled:_filteringMobileDataEnabled filteringWifiDataEnabled:_filteringWifiDataEnabled];
}
}

Expand All @@ -569,7 +624,29 @@ - (void)internalSetRestartByReachability:(BOOL)restart {
if (_enabled) {
_delayedSetEnabled = @(_enabled);
}
[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:_tunnelMode restartByReachability:restart enabled:NO];
[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:_tunnelMode restartByReachability:restart enabled:NO filteringMobileDataEnabled:_filteringMobileDataEnabled filteringWifiDataEnabled:_filteringWifiDataEnabled];
}
}

//must be called on workingQueue
- (void)internalSetFilteringWifiDataEnabled:(BOOL)enabled {

if (enabled != _filteringWifiDataEnabled) {
if (_enabled) {
_delayedSetEnabled = @(_enabled);
}
[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:_tunnelMode restartByReachability:_restartByReachability enabled:NO filteringMobileDataEnabled:_filteringMobileDataEnabled filteringWifiDataEnabled:enabled];
}
}

//must be called on workingQueue
- (void)internalSetFilteringMobileDataEnabled:(BOOL)enabled {

if (enabled != _filteringMobileDataEnabled) {
if (_enabled) {
_delayedSetEnabled = @(_enabled);
}
[self updateConfigurationForRemoteServer:_activeDnsServer tunnelMode:_tunnelMode restartByReachability:_restartByReachability enabled:NO filteringMobileDataEnabled:enabled filteringWifiDataEnabled:_filteringWifiDataEnabled];
}
}

Expand Down Expand Up @@ -599,7 +676,7 @@ - (void)loadConfiguration{
DDLogError(@"(APVPNManager) Error. Manager removing failed with error: %@", error.localizedDescription);
}
else {
DDLogInfo(@"(APVPNManager) Error. Manager successfully removed");
DDLogInfo(@"(APVPNManager). Manager successfully removed");
}
}];
}
Expand Down Expand Up @@ -636,8 +713,11 @@ - (void)loadConfiguration{

}

- (void)updateConfigurationForRemoteServer:(DnsServerInfo *)remoteServer tunnelMode:(APVpnManagerTunnelMode) tunnelMode restartByReachability:(BOOL)restartByReachability enabled:(BOOL)enabled{

- (void)updateConfigurationForRemoteServer:(DnsServerInfo *)remoteServer tunnelMode:(APVpnManagerTunnelMode) tunnelMode restartByReachability:(BOOL)restartByReachability
enabled:(BOOL)enabled
filteringMobileDataEnabled:(BOOL)filteringMobileDataEnabled
filteringWifiDataEnabled:(BOOL)filteringWifiDataEnabled {

[_busyLock lock];
_busy = YES;
[_busyLock unlock];
Expand All @@ -660,7 +740,9 @@ - (void)updateConfigurationForRemoteServer:(DnsServerInfo *)remoteServer tunnelM
protocol.providerConfiguration = @{
APVpnManagerParameterRemoteDnsServer: remoteServerData,
APVpnManagerParameterTunnelMode: @(tunnelMode),
APVpnManagerRestartByReachability : @(restartByReachability)
APVpnManagerRestartByReachability : @(restartByReachability),
APVpnManagerFilteringMobileDataEnabled: @(filteringMobileDataEnabled),
APVpnManagerFilteringWifiDataEnabled:@(filteringWifiDataEnabled)
};

if (_manager) {
Expand Down Expand Up @@ -694,7 +776,7 @@ - (void)updateConfigurationForRemoteServer:(DnsServerInfo *)remoteServer tunnelM
[self setStatuses];
});

DDLogInfo(@"(APVPNManager) Updating vpn conviguration failured: %@",
DDLogInfo(@"(APVPNManager) Updating vpn conviguration failed: %@",
(self.activeDnsServer.name ?: @"None"));

[self sendNotificationForced:NO];
Expand Down Expand Up @@ -754,7 +836,7 @@ - (void)setStatuses{
NSData *remoteDnsServerData = protocolConfiguration.providerConfiguration[APVpnManagerParameterRemoteDnsServer];

// Getting current settings from configuration.
//If settings are incorrect, then we assign default values.
// If settings are incorrect, then we assign default values.
DnsServerInfo *remoteServer = [NSKeyedUnarchiver unarchiveObjectWithData:remoteDnsServerData];
if (_activeDnsServer.serverId != remoteServer.serverId) {
[self willChangeValueForKey:@"activeDnsServer"];
Expand All @@ -774,8 +856,15 @@ - (void)setStatuses{

_restartByReachability = protocolConfiguration.providerConfiguration[APVpnManagerRestartByReachability] ?
[protocolConfiguration.providerConfiguration[APVpnManagerRestartByReachability] boolValue] : NO; // NO by default

_filteringMobileDataEnabled = protocolConfiguration.providerConfiguration[APVpnManagerFilteringMobileDataEnabled] ? [protocolConfiguration.providerConfiguration[APVpnManagerFilteringMobileDataEnabled] boolValue] : YES; // YES by default

_filteringWifiDataEnabled = protocolConfiguration.providerConfiguration[APVpnManagerFilteringWifiDataEnabled] ? [protocolConfiguration.providerConfiguration[APVpnManagerFilteringWifiDataEnabled] boolValue] : YES; // YES by default

// Save to user defaults
[_resources.sharedDefaults setBool:_restartByReachability forKey:AEDefaultsRestartByReachability];
[_resources.sharedDefaults setBool:_filteringMobileDataEnabled forKey:AEDefaultsFilterMobileEnabled];
[_resources.sharedDefaults setBool:_filteringWifiDataEnabled forKey:AEDefaultsFilterWifiEnabled];

NSString *connectionStatusReason = @"Unknown";

Expand Down Expand Up @@ -914,6 +1003,9 @@ - (void)startDelayedOperationsIfNeedIt{
_delayedSetEnabled = nil;
_delayedSetActiveDnsServer = nil;
_delayedSetTunnelMode = nil;
_delayedFilteringMobileDataEnabled = nil;
_delayedFilteringWifiDataEnabled = nil;
_delayedRestartByReachability = nil;
}

int localValue = 0;
Expand Down Expand Up @@ -946,6 +1038,27 @@ - (void)startDelayedOperationsIfNeedIt{
[self restartTunnel];
});
}
else if (_delayedFilteringMobileDataEnabled) {
BOOL mobileEnabled = [_delayedFilteringMobileDataEnabled boolValue];
_delayedFilteringMobileDataEnabled = nil;
dispatch_async(workingQueue, ^{
[self internalSetFilteringMobileDataEnabled:mobileEnabled];
});
}
else if (_delayedFilteringWifiDataEnabled) {
BOOL wifiEnabled = [_delayedFilteringWifiDataEnabled boolValue];
_delayedFilteringWifiDataEnabled = nil;
dispatch_async(workingQueue, ^{
[self internalSetFilteringWifiDataEnabled:wifiEnabled];
});
}
else if (_delayedRestartByReachability) {
BOOL restartEnabled = [_delayedRestartByReachability boolValue];
_delayedRestartByReachability = nil;
dispatch_async(workingQueue, ^{
[self internalSetRestartByReachability:restartEnabled];
});
}
}

[_busyLock unlock];
Expand Down
4 changes: 2 additions & 2 deletions AdguardExtension/AdguardApp/Services/DnsFiltersService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ class DnsFiltersService: NSObject, DnsFiltersServiceProtocol {
return []
}

return string.components(separatedBy: .newlines)
return string.isEmpty ? [] : string.components(separatedBy: .newlines)
}
set {
if let data = newValue.joined(separator: "\n").data(using: .utf8) {
Expand All @@ -157,7 +157,7 @@ class DnsFiltersService: NSObject, DnsFiltersServiceProtocol {
return []
}

return string.components(separatedBy: .newlines)
return string.isEmpty ? [] : string.components(separatedBy: .newlines)
}
set {
if let data = newValue.joined(separator: "\n").data(using: .utf8) {
Expand Down

0 comments on commit 37d14f7

Please sign in to comment.