From 062b4d4b16bbe1b64a679a4fd77599380a9742d0 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Fri, 8 Mar 2019 16:12:54 +0530 Subject: on-demand: Remove ActivateOnDemandSetting type The ActivateOnDemandOption type shall be used instead Signed-off-by: Roopesh Chander --- WireGuard/WireGuard.xcodeproj/project.pbxproj | 12 +- .../WireGuard/Tunnel/ActivateOnDemandOption.swift | 120 +++++++++++++++++ .../WireGuard/Tunnel/ActivateOnDemandSetting.swift | 144 --------------------- WireGuard/WireGuard/Tunnel/TunnelsManager.swift | 14 +- .../WireGuard/UI/ActivateOnDemandViewModel.swift | 12 +- .../TunnelDetailTableViewController.swift | 6 +- .../TunnelEditTableViewController.swift | 8 +- .../TunnelDetailTableViewController.swift | 4 +- .../ViewController/TunnelEditViewController.swift | 15 +-- 9 files changed, 148 insertions(+), 187 deletions(-) create mode 100644 WireGuard/WireGuard/Tunnel/ActivateOnDemandOption.swift delete mode 100644 WireGuard/WireGuard/Tunnel/ActivateOnDemandSetting.swift diff --git a/WireGuard/WireGuard.xcodeproj/project.pbxproj b/WireGuard/WireGuard.xcodeproj/project.pbxproj index 954b3f7..985ac06 100644 --- a/WireGuard/WireGuard.xcodeproj/project.pbxproj +++ b/WireGuard/WireGuard.xcodeproj/project.pbxproj @@ -129,7 +129,7 @@ 6FB1BDCA21D50F1700A991BF /* x25519.c in Sources */ = {isa = PBXBuildFile; fileRef = 6F6899A52180447E0012E523 /* x25519.c */; }; 6FB1BDCB21D50F1700A991BF /* Curve25519.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F6899A7218044FC0012E523 /* Curve25519.swift */; }; 6FB1BDCC21D50F5300A991BF /* TunnelsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7774EE21722D97006A79B3 /* TunnelsManager.swift */; }; - 6FB1BDCD21D50F5300A991BF /* ActivateOnDemandSetting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandSetting.swift */; }; + 6FB1BDCD21D50F5300A991BF /* ActivateOnDemandOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandOption.swift */; }; 6FB1BDCE21D50F5300A991BF /* TunnelStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F4541A821C451D100994C13 /* TunnelStatus.swift */; }; 6FB1BDD021D50F5300A991BF /* TunnelErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7F7E5E21C7D74B00527607 /* TunnelErrors.swift */; }; 6FB1BDD121D50F5300A991BF /* ZipImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FE254FA219C10800028284D /* ZipImporter.swift */; }; @@ -182,7 +182,7 @@ 6FFA5D952194454A0001E2F7 /* NETunnelProviderProtocol+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA5D942194454A0001E2F7 /* NETunnelProviderProtocol+Extension.swift */; }; 6FFA5D96219446380001E2F7 /* NETunnelProviderProtocol+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA5D942194454A0001E2F7 /* NETunnelProviderProtocol+Extension.swift */; }; 6FFA5DA021958ECC0001E2F7 /* ErrorNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA5D9F21958ECC0001E2F7 /* ErrorNotifier.swift */; }; - 6FFA5DA42197085D0001E2F7 /* ActivateOnDemandSetting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandSetting.swift */; }; + 6FFA5DA42197085D0001E2F7 /* ActivateOnDemandOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandOption.swift */; }; 6FFACD2021E4D8D500E9A2A5 /* ParseError+WireGuardAppError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FFACD1E21E4D89600E9A2A5 /* ParseError+WireGuardAppError.swift */; }; /* End PBXBuildFile section */ @@ -362,7 +362,7 @@ 6FF4AC482120B9E0002C96EB /* WireGuard.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WireGuard.entitlements; sourceTree = ""; }; 6FFA5D942194454A0001E2F7 /* NETunnelProviderProtocol+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NETunnelProviderProtocol+Extension.swift"; sourceTree = ""; }; 6FFA5D9F21958ECC0001E2F7 /* ErrorNotifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorNotifier.swift; sourceTree = ""; }; - 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandSetting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivateOnDemandSetting.swift; sourceTree = ""; }; + 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandOption.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivateOnDemandOption.swift; sourceTree = ""; }; 6FFACD1E21E4D89600E9A2A5 /* ParseError+WireGuardAppError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ParseError+WireGuardAppError.swift"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -543,7 +543,7 @@ children = ( 6F7774EE21722D97006A79B3 /* TunnelsManager.swift */, 6B707D8321F918D4000A8F73 /* TunnelConfiguration+UapiConfig.swift */, - 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandSetting.swift */, + 6FFA5DA32197085D0001E2F7 /* ActivateOnDemandOption.swift */, 5F4541A821C451D100994C13 /* TunnelStatus.swift */, 6FB1017821C57DE600766195 /* MockTunnels.swift */, 6F7F7E5E21C7D74B00527607 /* TunnelErrors.swift */, @@ -1158,7 +1158,7 @@ 6FBA101521D613F90051C35F /* Application.swift in Sources */, 6FB1BDCC21D50F5300A991BF /* TunnelsManager.swift in Sources */, 6F8F0D7222258153000E8335 /* ActivateOnDemandViewModel.swift in Sources */, - 6FB1BDCD21D50F5300A991BF /* ActivateOnDemandSetting.swift in Sources */, + 6FB1BDCD21D50F5300A991BF /* ActivateOnDemandOption.swift in Sources */, 6FB1BDCE21D50F5300A991BF /* TunnelStatus.swift in Sources */, 6FB1BDD021D50F5300A991BF /* TunnelErrors.swift in Sources */, 6FB1BDD121D50F5300A991BF /* ZipImporter.swift in Sources */, @@ -1307,7 +1307,7 @@ 5F4541A221C2D6DF00994C13 /* BorderedTextButton.swift in Sources */, 5FF7B96521CC95FA00A7DD74 /* PeerConfiguration.swift in Sources */, 6F7774E1217181B1006A79B3 /* MainViewController.swift in Sources */, - 6FFA5DA42197085D0001E2F7 /* ActivateOnDemandSetting.swift in Sources */, + 6FFA5DA42197085D0001E2F7 /* ActivateOnDemandOption.swift in Sources */, 5F4541B221CBFAEE00994C13 /* String+ArrayConversion.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/WireGuard/WireGuard/Tunnel/ActivateOnDemandOption.swift b/WireGuard/WireGuard/Tunnel/ActivateOnDemandOption.swift new file mode 100644 index 0000000..8b39f8c --- /dev/null +++ b/WireGuard/WireGuard/Tunnel/ActivateOnDemandOption.swift @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved. + +import NetworkExtension + +enum ActivateOnDemandOption: Equatable { + case off + case wiFiInterfaceOnly(ActivateOnDemandSSIDOption) + case nonWiFiInterfaceOnly + case anyInterface(ActivateOnDemandSSIDOption) +} + +#if os(iOS) +private let nonWiFiInterfaceType: NEOnDemandRuleInterfaceType = .cellular +#elseif os(macOS) +private let nonWiFiInterfaceType: NEOnDemandRuleInterfaceType = .ethernet +#else +#error("Unimplemented") +#endif + +enum ActivateOnDemandSSIDOption: Equatable { + case anySSID + case onlySpecificSSIDs([String]) + case exceptSpecificSSIDs([String]) +} + +extension ActivateOnDemandOption { + func apply(on tunnelProviderManager: NETunnelProviderManager) { + let rules: [NEOnDemandRule]? + switch self { + case .off: + rules = nil + case .wiFiInterfaceOnly(let ssidOption): + rules = ssidOnDemandRules(option: ssidOption) + [NEOnDemandRuleDisconnect(interfaceType: nonWiFiInterfaceType)] + case .nonWiFiInterfaceOnly: + rules = [NEOnDemandRuleConnect(interfaceType: nonWiFiInterfaceType), NEOnDemandRuleDisconnect(interfaceType: .wiFi)] + case .anyInterface(let ssidOption): + if case .anySSID = ssidOption { + rules = [NEOnDemandRuleConnect(interfaceType: .any)] + } else { + rules = ssidOnDemandRules(option: ssidOption) + [NEOnDemandRuleConnect(interfaceType: nonWiFiInterfaceType)] + } + } + tunnelProviderManager.onDemandRules = rules + tunnelProviderManager.isOnDemandEnabled = self != .off + } + + init(from tunnelProviderManager: NETunnelProviderManager) { + let rules = tunnelProviderManager.onDemandRules ?? [] + let activateOnDemandOption: ActivateOnDemandOption + switch rules.count { + case 0: + activateOnDemandOption = .off + case 1: + let rule = rules[0] + precondition(rule.action == .connect) + activateOnDemandOption = .anyInterface(.anySSID) + case 2: + let connectRule = rules.first(where: { $0.action == .connect })! + let disconnectRule = rules.first(where: { $0.action == .disconnect })! + if connectRule.interfaceTypeMatch == .wiFi && disconnectRule.interfaceTypeMatch == nonWiFiInterfaceType { + activateOnDemandOption = .wiFiInterfaceOnly(.anySSID) + } else if connectRule.interfaceTypeMatch == nonWiFiInterfaceType && disconnectRule.interfaceTypeMatch == .wiFi { + activateOnDemandOption = .nonWiFiInterfaceOnly + } else { + fatalError("Unexpected onDemandRules set on tunnel provider manager") + } + case 3: + let ssidRule = rules.first(where: { $0.interfaceTypeMatch == .wiFi && $0.ssidMatch != nil })! + let nonWiFiRule = rules.first(where: { $0.interfaceTypeMatch == nonWiFiInterfaceType })! + let ssids = ssidRule.ssidMatch! + switch (ssidRule.action, nonWiFiRule.action) { + case (.connect, .connect): + activateOnDemandOption = .anyInterface(.onlySpecificSSIDs(ssids)) + case (.connect, .disconnect): + activateOnDemandOption = .wiFiInterfaceOnly(.onlySpecificSSIDs(ssids)) + case (.disconnect, .connect): + activateOnDemandOption = .anyInterface(.exceptSpecificSSIDs(ssids)) + case (.disconnect, .disconnect): + activateOnDemandOption = .wiFiInterfaceOnly(.exceptSpecificSSIDs(ssids)) + default: + fatalError("Unexpected SSID onDemandRules set on tunnel provider manager") + } + default: + fatalError("Unexpected number of onDemandRules set on tunnel provider manager") + } + + self = activateOnDemandOption + } +} + +private extension NEOnDemandRuleConnect { + convenience init(interfaceType: NEOnDemandRuleInterfaceType, ssids: [String]? = nil) { + self.init() + interfaceTypeMatch = interfaceType + ssidMatch = ssids + } +} + +private extension NEOnDemandRuleDisconnect { + convenience init(interfaceType: NEOnDemandRuleInterfaceType, ssids: [String]? = nil) { + self.init() + interfaceTypeMatch = interfaceType + ssidMatch = ssids + } +} + +private func ssidOnDemandRules(option: ActivateOnDemandSSIDOption) -> [NEOnDemandRule] { + switch option { + case .anySSID: + return [NEOnDemandRuleConnect(interfaceType: .wiFi)] + case .onlySpecificSSIDs(let ssids): + assert(!ssids.isEmpty) + return [NEOnDemandRuleConnect(interfaceType: .wiFi, ssids: ssids), + NEOnDemandRuleDisconnect(interfaceType: .wiFi)] + case .exceptSpecificSSIDs(let ssids): + return [NEOnDemandRuleDisconnect(interfaceType: .wiFi, ssids: ssids), + NEOnDemandRuleConnect(interfaceType: .wiFi)] + } +} diff --git a/WireGuard/WireGuard/Tunnel/ActivateOnDemandSetting.swift b/WireGuard/WireGuard/Tunnel/ActivateOnDemandSetting.swift deleted file mode 100644 index 89edd77..0000000 --- a/WireGuard/WireGuard/Tunnel/ActivateOnDemandSetting.swift +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-License-Identifier: MIT -// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved. - -import NetworkExtension - -struct ActivateOnDemandSetting { - var isActivateOnDemandEnabled: Bool - var activateOnDemandOption: ActivateOnDemandOption -} - -enum ActivateOnDemandOption: Equatable { - case none // Valid only when isActivateOnDemandEnabled is false - case wiFiInterfaceOnly(ActivateOnDemandSSIDOption) - case nonWiFiInterfaceOnly - case anyInterface(ActivateOnDemandSSIDOption) -} - -#if os(iOS) -private let nonWiFiInterfaceType: NEOnDemandRuleInterfaceType = .cellular -#elseif os(macOS) -private let nonWiFiInterfaceType: NEOnDemandRuleInterfaceType = .ethernet -#else -#error("Unimplemented") -#endif - -enum ActivateOnDemandSSIDOption: Equatable { - case anySSID - case onlySpecificSSIDs([String]) - case exceptSpecificSSIDs([String]) -} - -extension ActivateOnDemandSetting { - func apply(on tunnelProviderManager: NETunnelProviderManager) { - tunnelProviderManager.isOnDemandEnabled = isActivateOnDemandEnabled - let rules: [NEOnDemandRule]? - switch activateOnDemandOption { - case .none: - rules = nil - case .wiFiInterfaceOnly(let ssidOption): - rules = ssidOnDemandRules(option: ssidOption) + [NEOnDemandRuleDisconnect(interfaceType: nonWiFiInterfaceType)] - case .nonWiFiInterfaceOnly: - rules = [NEOnDemandRuleConnect(interfaceType: nonWiFiInterfaceType), NEOnDemandRuleDisconnect(interfaceType: .wiFi)] - case .anyInterface(let ssidOption): - if case .anySSID = ssidOption { - rules = [NEOnDemandRuleConnect(interfaceType: .any)] - } else { - rules = ssidOnDemandRules(option: ssidOption) + [NEOnDemandRuleConnect(interfaceType: nonWiFiInterfaceType)] - } - } - tunnelProviderManager.onDemandRules = rules - } - - init(from tunnelProviderManager: NETunnelProviderManager) { - let rules = tunnelProviderManager.onDemandRules ?? [] - let activateOnDemandOption: ActivateOnDemandOption - switch rules.count { - case 0: - activateOnDemandOption = .none - case 1: - let rule = rules[0] - precondition(rule.action == .connect) - activateOnDemandOption = .anyInterface(.anySSID) - case 2: - let connectRule = rules.first(where: { $0.action == .connect })! - let disconnectRule = rules.first(where: { $0.action == .disconnect })! - if connectRule.interfaceTypeMatch == .wiFi && disconnectRule.interfaceTypeMatch == nonWiFiInterfaceType { - activateOnDemandOption = .wiFiInterfaceOnly(.anySSID) - } else if connectRule.interfaceTypeMatch == nonWiFiInterfaceType && disconnectRule.interfaceTypeMatch == .wiFi { - activateOnDemandOption = .nonWiFiInterfaceOnly - } else { - fatalError("Unexpected onDemandRules set on tunnel provider manager") - } - case 3: - let ssidRule = rules.first(where: { $0.interfaceTypeMatch == .wiFi && $0.ssidMatch != nil })! - let nonWiFiRule = rules.first(where: { $0.interfaceTypeMatch == nonWiFiInterfaceType })! - let ssids = ssidRule.ssidMatch! - switch (ssidRule.action, nonWiFiRule.action) { - case (.connect, .connect): - activateOnDemandOption = .anyInterface(.onlySpecificSSIDs(ssids)) - case (.connect, .disconnect): - activateOnDemandOption = .wiFiInterfaceOnly(.onlySpecificSSIDs(ssids)) - case (.disconnect, .connect): - activateOnDemandOption = .anyInterface(.exceptSpecificSSIDs(ssids)) - case (.disconnect, .disconnect): - activateOnDemandOption = .wiFiInterfaceOnly(.exceptSpecificSSIDs(ssids)) - default: - fatalError("Unexpected SSID onDemandRules set on tunnel provider manager") - } - default: - fatalError("Unexpected number of onDemandRules set on tunnel provider manager") - } - - self.activateOnDemandOption = activateOnDemandOption - if activateOnDemandOption == .none { - isActivateOnDemandEnabled = false - } else { - isActivateOnDemandEnabled = tunnelProviderManager.isOnDemandEnabled - } - } -} - -extension ActivateOnDemandSetting { - static var defaultSetting = ActivateOnDemandSetting(isActivateOnDemandEnabled: false, activateOnDemandOption: .none) -} - -private extension NEOnDemandRuleConnect { - convenience init(interfaceType: NEOnDemandRuleInterfaceType, ssids: [String]? = nil) { - self.init() - interfaceTypeMatch = interfaceType - ssidMatch = ssids - } -} - -private extension NEOnDemandRuleDisconnect { - convenience init(interfaceType: NEOnDemandRuleInterfaceType, ssids: [String]? = nil) { - self.init() - interfaceTypeMatch = interfaceType - ssidMatch = ssids - } -} - -private func ssidOnDemandRules(option: ActivateOnDemandSSIDOption) -> [NEOnDemandRule] { - switch option { - case .anySSID: - return [NEOnDemandRuleConnect(interfaceType: .wiFi)] - case .onlySpecificSSIDs(let ssids): - assert(!ssids.isEmpty) - return [NEOnDemandRuleConnect(interfaceType: .wiFi, ssids: ssids), - NEOnDemandRuleDisconnect(interfaceType: .wiFi)] - case .exceptSpecificSSIDs(let ssids): - return [NEOnDemandRuleDisconnect(interfaceType: .wiFi, ssids: ssids), - NEOnDemandRuleConnect(interfaceType: .wiFi)] - } -} - -extension ActivateOnDemandSetting { - init(with option: ActivateOnDemandOption) { - if option == .none { - self = ActivateOnDemandSetting(isActivateOnDemandEnabled: false, activateOnDemandOption: option) - } else { - self = ActivateOnDemandSetting(isActivateOnDemandEnabled: true, activateOnDemandOption: option) - } - } -} diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift index 1a467f5..8f4c87c 100644 --- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift +++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift @@ -97,7 +97,7 @@ class TunnelsManager { } } - func add(tunnelConfiguration: TunnelConfiguration, activateOnDemandSetting: ActivateOnDemandSetting = ActivateOnDemandSetting.defaultSetting, completionHandler: @escaping (WireGuardResult) -> Void) { + func add(tunnelConfiguration: TunnelConfiguration, onDemandOption: ActivateOnDemandOption = .off, completionHandler: @escaping (WireGuardResult) -> Void) { let tunnelName = tunnelConfiguration.name ?? "" if tunnelName.isEmpty { completionHandler(.failure(TunnelsManagerError.tunnelNameEmpty)) @@ -113,7 +113,7 @@ class TunnelsManager { tunnelProviderManager.setTunnelConfiguration(tunnelConfiguration) tunnelProviderManager.isEnabled = true - activateOnDemandSetting.apply(on: tunnelProviderManager) + onDemandOption.apply(on: tunnelProviderManager) let activeTunnel = tunnels.first { $0.status == .active || $0.status == .activating } @@ -167,7 +167,7 @@ class TunnelsManager { } } - func modify(tunnel: TunnelContainer, tunnelConfiguration: TunnelConfiguration, activateOnDemandSetting: ActivateOnDemandSetting, completionHandler: @escaping (TunnelsManagerError?) -> Void) { + func modify(tunnel: TunnelContainer, tunnelConfiguration: TunnelConfiguration, onDemandOption: ActivateOnDemandOption, completionHandler: @escaping (TunnelsManagerError?) -> Void) { let tunnelName = tunnelConfiguration.name ?? "" if tunnelName.isEmpty { completionHandler(TunnelsManagerError.tunnelNameEmpty) @@ -191,8 +191,8 @@ class TunnelsManager { } tunnelProviderManager.isEnabled = true - let isActivatingOnDemand = !tunnelProviderManager.isOnDemandEnabled && activateOnDemandSetting.isActivateOnDemandEnabled - activateOnDemandSetting.apply(on: tunnelProviderManager) + let isActivatingOnDemand = !tunnelProviderManager.isOnDemandEnabled && onDemandOption != .off + onDemandOption.apply(on: tunnelProviderManager) tunnelProviderManager.saveToPreferences { [weak self] error in guard error == nil else { @@ -455,8 +455,8 @@ class TunnelContainer: NSObject { return tunnelProvider.tunnelConfiguration } - var activateOnDemandSetting: ActivateOnDemandSetting { - return ActivateOnDemandSetting(from: tunnelProvider) + var onDemandOption: ActivateOnDemandOption { + return ActivateOnDemandOption(from: tunnelProvider) } init(tunnel: NETunnelProviderManager) { diff --git a/WireGuard/WireGuard/UI/ActivateOnDemandViewModel.swift b/WireGuard/WireGuard/UI/ActivateOnDemandViewModel.swift index f38ca6a..2f13f07 100644 --- a/WireGuard/WireGuard/UI/ActivateOnDemandViewModel.swift +++ b/WireGuard/WireGuard/UI/ActivateOnDemandViewModel.swift @@ -49,18 +49,10 @@ class ActivateOnDemandViewModel { } extension ActivateOnDemandViewModel { - convenience init(setting: ActivateOnDemandSetting) { - if setting.isActivateOnDemandEnabled { - self.init(option: setting.activateOnDemandOption) - } else { - self.init(option: .none) - } - } - convenience init(option: ActivateOnDemandOption) { self.init() switch option { - case .none: + case .off: break case .wiFiInterfaceOnly(let onDemandSSIDOption): isWiFiInterfaceEnabled = true @@ -77,7 +69,7 @@ extension ActivateOnDemandViewModel { func toOnDemandOption() -> ActivateOnDemandOption { switch (isWiFiInterfaceEnabled, isNonWiFiInterfaceEnabled) { case (false, false): - return .none + return .off case (false, true): return .nonWiFiInterfaceOnly case (true, false): diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift index 19d66e7..4ed75a6 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift @@ -45,7 +45,7 @@ class TunnelDetailTableViewController: UITableViewController { self.tunnelsManager = tunnelsManager self.tunnel = tunnel tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) - onDemandViewModel = ActivateOnDemandViewModel(setting: tunnel.activateOnDemandSetting) + onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption) super.init(style: .grouped) loadSections() loadVisibleFields() @@ -60,7 +60,7 @@ class TunnelDetailTableViewController: UITableViewController { } onDemandObservationToken = tunnel.observe(\.isActivateOnDemandEnabled) { [weak self] tunnel, _ in // Handle On-Demand getting turned on/off outside of the app - self?.onDemandViewModel = ActivateOnDemandViewModel(setting: tunnel.activateOnDemandSetting) + self?.onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption) self?.updateActivateOnDemandFields() } } @@ -274,7 +274,7 @@ class TunnelDetailTableViewController: UITableViewController { extension TunnelDetailTableViewController: TunnelEditTableViewControllerDelegate { func tunnelSaved(tunnel: TunnelContainer) { tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) - onDemandViewModel = ActivateOnDemandViewModel(setting: tunnel.activateOnDemandSetting) + onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption) loadSections() loadVisibleFields() title = tunnel.name diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift index f640414..e5f322a 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift @@ -60,7 +60,7 @@ class TunnelEditTableViewController: UITableViewController { self.tunnelsManager = tunnelsManager self.tunnel = tunnel tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) - onDemandViewModel = ActivateOnDemandViewModel(setting: tunnel.activateOnDemandSetting) + onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption) super.init(style: .grouped) loadSections() } @@ -113,10 +113,10 @@ class TunnelEditTableViewController: UITableViewController { ErrorPresenter.showErrorAlert(title: alertTitle, message: errorMessage, from: self) tableView.reloadData() // Highlight erroring fields case .saved(let tunnelConfiguration): - let activateOnDemandSetting = ActivateOnDemandSetting(with: onDemandViewModel.toOnDemandOption()) + let onDemandOption = onDemandViewModel.toOnDemandOption() if let tunnel = tunnel { // We're modifying an existing tunnel - tunnelsManager.modify(tunnel: tunnel, tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: activateOnDemandSetting) { [weak self] error in + tunnelsManager.modify(tunnel: tunnel, tunnelConfiguration: tunnelConfiguration, onDemandOption: onDemandOption) { [weak self] error in if let error = error { ErrorPresenter.showErrorAlert(error: error, from: self) } else { @@ -126,7 +126,7 @@ class TunnelEditTableViewController: UITableViewController { } } else { // We're adding a new tunnel - tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: activateOnDemandSetting) { [weak self] result in + tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, onDemandOption: onDemandOption) { [weak self] result in if let error = result.error { ErrorPresenter.showErrorAlert(error: error, from: self) } else { diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift index 1cb9e2a..152cbda 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift @@ -97,7 +97,7 @@ class TunnelDetailTableViewController: NSViewController { self.tunnelsManager = tunnelsManager self.tunnel = tunnel tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) - onDemandViewModel = ActivateOnDemandViewModel(setting: tunnel.activateOnDemandSetting) + onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption) super.init(nibName: nil, bundle: nil) updateTableViewModelRowsBySection() updateTableViewModelRows() @@ -492,7 +492,7 @@ extension TunnelDetailTableViewController: NSTableViewDelegate { extension TunnelDetailTableViewController: TunnelEditViewControllerDelegate { func tunnelSaved(tunnel: TunnelContainer) { tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) - onDemandViewModel = ActivateOnDemandViewModel(setting: tunnel.activateOnDemandSetting) + onDemandViewModel = ActivateOnDemandViewModel(option: tunnel.onDemandOption) updateTableViewModelRowsBySection() updateTableViewModelRows() updateStatus() diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift index 51b1944..d3c76f5 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift @@ -84,13 +84,6 @@ class TunnelEditViewController: NSViewController { return button }() - let activateOnDemandOptions: [ActivateOnDemandOption] = [ - .none, - .anyInterface(.anySSID), - .wiFiInterfaceOnly(.anySSID), - .nonWiFiInterfaceOnly - ] - let tunnelsManager: TunnelsManager let tunnel: TunnelContainer? var onDemandViewModel: ActivateOnDemandViewModel @@ -106,7 +99,7 @@ class TunnelEditViewController: NSViewController { init(tunnelsManager: TunnelsManager, tunnel: TunnelContainer?) { self.tunnelsManager = tunnelsManager self.tunnel = tunnel - self.onDemandViewModel = tunnel != nil ? ActivateOnDemandViewModel(setting: tunnel!.activateOnDemandSetting) : ActivateOnDemandViewModel() + self.onDemandViewModel = tunnel != nil ? ActivateOnDemandViewModel(option: tunnel!.onDemandOption) : ActivateOnDemandViewModel() super.init(nibName: nil, bundle: nil) } @@ -223,7 +216,7 @@ class TunnelEditViewController: NSViewController { onDemandViewModel.isNonWiFiInterfaceEnabled = onDemandEthernetCheckbox.state == .on onDemandWiFiControls.saveToViewModel() - let onDemandSetting = ActivateOnDemandSetting(with: onDemandViewModel.toOnDemandOption()) + let onDemandOption = onDemandViewModel.toOnDemandOption() let isTunnelModifiedWithoutChangingName = (tunnel != nil && tunnel!.name == name) guard isTunnelModifiedWithoutChangingName || tunnelsManager.tunnel(named: name) == nil else { @@ -259,7 +252,7 @@ class TunnelEditViewController: NSViewController { if let tunnel = tunnel { // We're modifying an existing tunnel - tunnelsManager.modify(tunnel: tunnel, tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: onDemandSetting) { [weak self] error in + tunnelsManager.modify(tunnel: tunnel, tunnelConfiguration: tunnelConfiguration, onDemandOption: onDemandOption) { [weak self] error in self?.setUserInteractionEnabled(true) if let error = error { ErrorPresenter.showErrorAlert(error: error, from: self) @@ -271,7 +264,7 @@ class TunnelEditViewController: NSViewController { } else { // We're creating a new tunnel AppStorePrivacyNotice.show(from: self, into: tunnelsManager) { [weak self] in - self?.tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: onDemandSetting) { [weak self] result in + self?.tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, onDemandOption: onDemandOption) { [weak self] result in self?.setUserInteractionEnabled(true) if let error = result.error { ErrorPresenter.showErrorAlert(error: error, from: self) -- cgit v1.2.3-59-g8ed1b