From 8553723e04c4d63b99e669df2e43fc4a914b7f9d Mon Sep 17 00:00:00 2001 From: Eric Kuck Date: Thu, 20 Dec 2018 22:52:45 -0600 Subject: Updated NETunnelProvider save format Signed-off-by: Eric Kuck --- .../ConfigFile/WgQuickConfigFileWriter.swift | 8 +++---- WireGuard/WireGuard/Tunnel/TunnelsManager.swift | 26 ++++++++++++++-------- WireGuard/WireGuard/UI/TunnelViewModel.swift | 8 +++---- .../SettingsTableViewController.swift | 2 +- .../TunnelDetailTableViewController.swift | 8 +++---- .../TunnelEditTableViewController.swift | 4 ++-- 6 files changed, 32 insertions(+), 24 deletions(-) (limited to 'WireGuard/WireGuard') diff --git a/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileWriter.swift b/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileWriter.swift index 78c4f8b..2dab266 100644 --- a/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileWriter.swift +++ b/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileWriter.swift @@ -12,11 +12,11 @@ class WgQuickConfigFileWriter { output.append("ListenPort = \(listenPort)\n") } if !interface.addresses.isEmpty { - let addressString = interface.addresses.map { $0.stringRepresentation() }.joined(separator: ", ") + let addressString = interface.addresses.map { $0.stringRepresentation }.joined(separator: ", ") output.append("Address = \(addressString)\n") } if !interface.dns.isEmpty { - let dnsString = interface.dns.map { $0.stringRepresentation() }.joined(separator: ", ") + let dnsString = interface.dns.map { $0.stringRepresentation }.joined(separator: ", ") output.append("DNS = \(dnsString)\n") } if let mtu = interface.mtu { @@ -30,11 +30,11 @@ class WgQuickConfigFileWriter { output.append("PresharedKey = \(preSharedKey.base64EncodedString())\n") } if !peer.allowedIPs.isEmpty { - let allowedIPsString = peer.allowedIPs.map { $0.stringRepresentation() }.joined(separator: ", ") + let allowedIPsString = peer.allowedIPs.map { $0.stringRepresentation }.joined(separator: ", ") output.append("AllowedIPs = \(allowedIPsString)\n") } if let endpoint = peer.endpoint { - output.append("Endpoint = \(endpoint.stringRepresentation())\n") + output.append("Endpoint = \(endpoint.stringRepresentation)\n") } if let persistentKeepAlive = peer.persistentKeepAlive { output.append("PersistentKeepalive = \(persistentKeepAlive)\n") diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift index f6dcc32..b56cb37 100644 --- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift +++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift @@ -41,7 +41,14 @@ class TunnelsManager { completionHandler(.failure(TunnelsManagerError.systemErrorOnListingTunnels(systemError: error))) return } - completionHandler(.success(TunnelsManager(tunnelProviders: managers ?? []))) + + let tunnelManagers = managers ?? [] + tunnelManagers.forEach { + if ($0.protocolConfiguration as? NETunnelProviderProtocol)?.migrateConfigurationIfNeeded() == true { + $0.saveToPreferences { _ in } + } + } + completionHandler(.success(TunnelsManager(tunnelProviders: tunnelManagers))) } #endif } @@ -309,6 +316,7 @@ class TunnelsManager { NotificationCenter.default.removeObserver(statusObservationToken) } } + } class TunnelContainer: NSObject { @@ -344,6 +352,14 @@ class TunnelContainer: NSObject { fileprivate let tunnelProvider: NETunnelProviderManager private var lastTunnelConnectionStatus: NEVPNStatus? + var tunnelConfiguration: TunnelConfiguration? { + return (tunnelProvider.protocolConfiguration as? NETunnelProviderProtocol)?.tunnelConfiguration + } + + var activateOnDemandSetting: ActivateOnDemandSetting { + return ActivateOnDemandSetting(from: tunnelProvider) + } + init(tunnel: NETunnelProviderManager) { name = tunnel.localizedDescription ?? "Unnamed" let status = TunnelStatus(from: tunnel.connection.status) @@ -353,14 +369,6 @@ class TunnelContainer: NSObject { super.init() } - func tunnelConfiguration() -> TunnelConfiguration? { - return (tunnelProvider.protocolConfiguration as? NETunnelProviderProtocol)?.tunnelConfiguration() - } - - func activateOnDemandSetting() -> ActivateOnDemandSetting { - return ActivateOnDemandSetting(from: tunnelProvider) - } - func refreshStatus() { let status = TunnelStatus(from: tunnelProvider.connection.status) self.status = status diff --git a/WireGuard/WireGuard/UI/TunnelViewModel.swift b/WireGuard/WireGuard/UI/TunnelViewModel.swift index f7ebb68..0b5b8c0 100644 --- a/WireGuard/WireGuard/UI/TunnelViewModel.swift +++ b/WireGuard/WireGuard/UI/TunnelViewModel.swift @@ -106,7 +106,7 @@ class TunnelViewModel { scratchpad[.privateKey] = config.privateKey.base64EncodedString() scratchpad[.publicKey] = config.publicKey.base64EncodedString() if !config.addresses.isEmpty { - scratchpad[.addresses] = config.addresses.map { $0.stringRepresentation() }.joined(separator: ", ") + scratchpad[.addresses] = config.addresses.map { $0.stringRepresentation }.joined(separator: ", ") } if let listenPort = config.listenPort { scratchpad[.listenPort] = String(listenPort) @@ -115,7 +115,7 @@ class TunnelViewModel { scratchpad[.mtu] = String(mtu) } if !config.dns.isEmpty { - scratchpad[.dns] = config.dns.map { $0.stringRepresentation() }.joined(separator: ", ") + scratchpad[.dns] = config.dns.map { $0.stringRepresentation }.joined(separator: ", ") } } @@ -248,10 +248,10 @@ class TunnelViewModel { scratchpad[.preSharedKey] = preSharedKey.base64EncodedString() } if !config.allowedIPs.isEmpty { - scratchpad[.allowedIPs] = config.allowedIPs.map { $0.stringRepresentation() }.joined(separator: ", ") + scratchpad[.allowedIPs] = config.allowedIPs.map { $0.stringRepresentation }.joined(separator: ", ") } if let endpoint = config.endpoint { - scratchpad[.endpoint] = endpoint.stringRepresentation() + scratchpad[.endpoint] = endpoint.stringRepresentation } if let persistentKeepAlive = config.persistentKeepAlive { scratchpad[.persistentKeepAlive] = String(persistentKeepAlive) diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/SettingsTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/SettingsTableViewController.swift index 22edcbc..426e053 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/SettingsTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/SettingsTableViewController.swift @@ -93,7 +93,7 @@ class SettingsTableViewController: UITableViewController { _ = FileManager.deleteFile(at: destinationURL) let count = tunnelsManager.numberOfTunnels() - let tunnelConfigurations = (0 ..< count).compactMap { tunnelsManager.tunnel(at: $0).tunnelConfiguration() } + let tunnelConfigurations = (0 ..< count).compactMap { tunnelsManager.tunnel(at: $0).tunnelConfiguration } ZipExporter.exportConfigFiles(tunnelConfigurations: tunnelConfigurations, to: destinationURL) { [weak self] error in if let error = error { ErrorPresenter.showErrorAlert(error: error, from: self) diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift index 50c0e33..8378311 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift @@ -35,7 +35,7 @@ class TunnelDetailTableViewController: UITableViewController { init(tunnelsManager: TunnelsManager, tunnel: TunnelContainer) { self.tunnelsManager = tunnelsManager self.tunnel = tunnel - tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration()) + tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) super.init(style: .grouped) loadSections() } @@ -101,7 +101,7 @@ class TunnelDetailTableViewController: UITableViewController { extension TunnelDetailTableViewController: TunnelEditTableViewControllerDelegate { func tunnelSaved(tunnel: TunnelContainer) { - tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration()) + tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) loadSections() title = tunnel.name restorationIdentifier = "TunnelDetailVC:\(tunnel.name)" @@ -229,9 +229,9 @@ extension TunnelDetailTableViewController { private func onDemandCell(for tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell { let cell: KeyValueCell = tableView.dequeueReusableCell(for: indexPath) cell.key = tr("tunnelOnDemandKey") - cell.value = TunnelViewModel.activateOnDemandDetailText(for: tunnel.activateOnDemandSetting()) + cell.value = TunnelViewModel.activateOnDemandDetailText(for: tunnel.activateOnDemandSetting) onDemandStatusObservationToken = tunnel.observe(\.isActivateOnDemandEnabled) { [weak cell] tunnel, _ in - cell?.value = TunnelViewModel.activateOnDemandDetailText(for: tunnel.activateOnDemandSetting()) + cell?.value = TunnelViewModel.activateOnDemandDetailText(for: tunnel.activateOnDemandSetting) } return cell } diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift index 3d9724c..79dc7b6 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelEditTableViewController.swift @@ -49,8 +49,8 @@ class TunnelEditTableViewController: UITableViewController { // Use this initializer to edit an existing tunnel. self.tunnelsManager = tunnelsManager self.tunnel = tunnel - tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration()) - activateOnDemandSetting = tunnel.activateOnDemandSetting() + tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) + activateOnDemandSetting = tunnel.activateOnDemandSetting super.init(style: .grouped) loadSections() } -- cgit v1.2.3-59-g8ed1b