From 9a00befca9481753bceb0f3a8fb9508959c13918 Mon Sep 17 00:00:00 2001 From: Davide De Rosa Date: Wed, 25 Aug 2021 17:57:33 +0200 Subject: [PATCH] Move configuration implementation to single file --- TunnelKit.xcodeproj/project.pbxproj | 6 +++ .../NetworkExtensionVPNConfiguration.swift | 47 +++++++++++++++++++ .../Sources/Manager/VPNConfiguration.swift | 21 --------- 3 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 TunnelKit/Sources/Manager/NetworkExtensionVPNConfiguration.swift diff --git a/TunnelKit.xcodeproj/project.pbxproj b/TunnelKit.xcodeproj/project.pbxproj index 074673f..8f34757 100644 --- a/TunnelKit.xcodeproj/project.pbxproj +++ b/TunnelKit.xcodeproj/project.pbxproj @@ -190,6 +190,8 @@ 0E94E8EB25BACEBD0040BC30 /* DNSProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E94E8E925BACEBD0040BC30 /* DNSProtocol.swift */; }; 0EA82A282190B220007960EB /* TunnelKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E3251C51F95770D00C108D9 /* TunnelKit.framework */; }; 0EA82A3E2190B2BC007960EB /* pia-2048.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0E749F612178911C00BB2701 /* pia-2048.pem */; }; + 0EA9F28926D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA9F28826D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift */; }; + 0EA9F28A26D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA9F28826D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift */; }; 0EAC57372494277A00D0FCE0 /* OpenVPNProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EAC57312494277A00D0FCE0 /* OpenVPNProvider.swift */; }; 0EAC57382494277A00D0FCE0 /* OpenVPNProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EAC57312494277A00D0FCE0 /* OpenVPNProvider.swift */; }; 0EAC57392494277A00D0FCE0 /* MockVPNProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EAC57322494277A00D0FCE0 /* MockVPNProvider.swift */; }; @@ -571,6 +573,7 @@ 0E85A25B202CCA3D0059E9F9 /* Host.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Host.entitlements; sourceTree = ""; }; 0E94E8E925BACEBD0040BC30 /* DNSProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DNSProtocol.swift; sourceTree = ""; }; 0EA82A232190B220007960EB /* TunnelKitTests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TunnelKitTests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0EA9F28826D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkExtensionVPNConfiguration.swift; sourceTree = ""; }; 0EAC57312494277A00D0FCE0 /* OpenVPNProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenVPNProvider.swift; sourceTree = ""; }; 0EAC57322494277A00D0FCE0 /* MockVPNProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockVPNProvider.swift; sourceTree = ""; }; 0EAC57332494277A00D0FCE0 /* VPNStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPNStatus.swift; sourceTree = ""; }; @@ -1033,6 +1036,7 @@ isa = PBXGroup; children = ( 0EAC57322494277A00D0FCE0 /* MockVPNProvider.swift */, + 0EA9F28826D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift */, 0EAC57362494277A00D0FCE0 /* VPN.swift */, 0EAC57342494277A00D0FCE0 /* VPNConfiguration.swift */, 0EAC57352494277A00D0FCE0 /* VPNProvider.swift */, @@ -2027,6 +2031,7 @@ 0E23B43522982AF800304C30 /* CoreConfiguration+OpenVPN.swift in Sources */, 0EFEB46D2006D3C800F81029 /* Data+Manipulation.swift in Sources */, 0E23B46B22982AF800304C30 /* CryptoCBC.m in Sources */, + 0EA9F28926D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift in Sources */, 0E23B46522982AF800304C30 /* EncryptionBridge.swift in Sources */, 0EE2F9F422918DA100F56F49 /* NWTCPConnectionState+Description.swift in Sources */, 0EFEB4742006D3C800F81029 /* CoreConfiguration.swift in Sources */, @@ -2117,6 +2122,7 @@ 0E23B43622982AF800304C30 /* CoreConfiguration+OpenVPN.swift in Sources */, 0EFB902C22788512006405E4 /* RoutingTable.m in Sources */, 0E23B46C22982AF800304C30 /* CryptoCBC.m in Sources */, + 0EA9F28A26D69FAE00E806E1 /* NetworkExtensionVPNConfiguration.swift in Sources */, 0E23B46622982AF800304C30 /* EncryptionBridge.swift in Sources */, 0EFEB4952006D7F300F81029 /* SecureRandom.swift in Sources */, 0EE2F9F522918DA100F56F49 /* NWTCPConnectionState+Description.swift in Sources */, diff --git a/TunnelKit/Sources/Manager/NetworkExtensionVPNConfiguration.swift b/TunnelKit/Sources/Manager/NetworkExtensionVPNConfiguration.swift new file mode 100644 index 0000000..074f239 --- /dev/null +++ b/TunnelKit/Sources/Manager/NetworkExtensionVPNConfiguration.swift @@ -0,0 +1,47 @@ +// +// NetworkExtensionVPNConfiguration.swift +// TunnelKit +// +// Created by Davide De Rosa on 8/25/21. +// Copyright (c) 2021 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of TunnelKit. +// +// TunnelKit is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// TunnelKit is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with TunnelKit. If not, see . +// + +import Foundation +import NetworkExtension + +/// A `VPNConfiguration` built on top of NetworkExtension entities. +public struct NetworkExtensionVPNConfiguration: VPNConfiguration { + + /// :nodoc: + public var title: String + + /// The `NETunnelProviderProtocol` object embedding tunnel configuration. + public let protocolConfiguration: NETunnelProviderProtocol + + /// The on-demand rules to establish. + public let onDemandRules: [NEOnDemandRule] + + /// :nodoc: + public init(title: String, protocolConfiguration: NETunnelProviderProtocol, onDemandRules: [NEOnDemandRule]) { + self.title = title + self.protocolConfiguration = protocolConfiguration + self.onDemandRules = onDemandRules + } +} diff --git a/TunnelKit/Sources/Manager/VPNConfiguration.swift b/TunnelKit/Sources/Manager/VPNConfiguration.swift index 6d629dc..f23d9c3 100644 --- a/TunnelKit/Sources/Manager/VPNConfiguration.swift +++ b/TunnelKit/Sources/Manager/VPNConfiguration.swift @@ -24,7 +24,6 @@ // import Foundation -import NetworkExtension /// Generic marker for objects able to configure a `VPNProvider`. public protocol VPNConfiguration { @@ -32,23 +31,3 @@ public protocol VPNConfiguration { /// The profile title in device settings. var title: String { get } } - -/// A `VPNConfiguration` built on top of NetworkExtension entities. -public struct NetworkExtensionVPNConfiguration: VPNConfiguration { - - /// :nodoc: - public var title: String - - /// The `NETunnelProviderProtocol` object embedding tunnel configuration. - public let protocolConfiguration: NETunnelProviderProtocol - - /// The on-demand rules to establish. - public let onDemandRules: [NEOnDemandRule] - - /// :nodoc: - public init(title: String, protocolConfiguration: NETunnelProviderProtocol, onDemandRules: [NEOnDemandRule]) { - self.title = title - self.protocolConfiguration = protocolConfiguration - self.onDemandRules = onDemandRules - } -}