diff options
author | Eric Kuck <eric@bluelinelabs.com> | 2018-12-21 15:16:09 -0600 |
---|---|---|
committer | Eric Kuck <eric@bluelinelabs.com> | 2018-12-21 16:32:08 -0600 |
commit | 1fecd8eb6c5c2327d4bfd5044876be12876fc7e5 (patch) | |
tree | 45c7f4c552eb01bd15c54e58615c9122acc99e83 /WireGuard/Shared/NETunnelProviderProtocol+Extension.swift | |
parent | Do not require NetworkExtension to know its own name (diff) | |
download | wireguard-apple-1fecd8eb6c5c2327d4bfd5044876be12876fc7e5.tar.xz wireguard-apple-1fecd8eb6c5c2327d4bfd5044876be12876fc7e5.zip |
providerConfiguration is now a WgQuickConfig
Signed-off-by: Eric Kuck <eric@bluelinelabs.com>
Diffstat (limited to 'WireGuard/Shared/NETunnelProviderProtocol+Extension.swift')
-rw-r--r-- | WireGuard/Shared/NETunnelProviderProtocol+Extension.swift | 40 |
1 files changed, 12 insertions, 28 deletions
diff --git a/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift b/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift index 6f4e3eb..4f3e122 100644 --- a/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift +++ b/WireGuard/Shared/NETunnelProviderProtocol+Extension.swift @@ -3,38 +3,21 @@ import NetworkExtension +private var tunnelNameKey: Void? + extension NETunnelProviderProtocol { enum Keys: String { - case wgQuickConfig = "WgQuickConfigV1" - } - - var tunnelConfiguration: TunnelConfiguration? { - migrateConfigurationIfNeeded() - - let tunnelConfigurationData: Data? - if let configurationDictionary = providerConfiguration?[Keys.wgQuickConfig.rawValue] { - tunnelConfigurationData = try? JSONSerialization.data(withJSONObject: configurationDictionary, options: []) - } else { - tunnelConfigurationData = nil - } - - guard tunnelConfigurationData != nil else { return nil } - return try? JSONDecoder().decode(TunnelConfiguration.self, from: tunnelConfigurationData!) + case wgQuickConfig = "WgQuickConfig" } convenience init?(tunnelConfiguration: TunnelConfiguration) { - assert(!tunnelConfiguration.interface.name.isEmpty) - - guard let tunnelConfigData = try? JSONEncoder().encode(tunnelConfiguration) else { return nil } - guard let tunnelConfigDictionary = try? JSONSerialization.jsonObject(with: tunnelConfigData, options: .allowFragments) else { return nil } - self.init() - + let appId = Bundle.main.bundleIdentifier! providerBundleIdentifier = "\(appId).network-extension" - providerConfiguration = [ Keys.wgQuickConfig.rawValue: tunnelConfigDictionary ] - + providerConfiguration = [Keys.wgQuickConfig.rawValue: tunnelConfiguration.asWgQuickConfig()] + let endpoints = tunnelConfiguration.peers.compactMap { $0.endpoint } if endpoints.count == 1 { serverAddress = endpoints[0].stringRepresentation @@ -43,13 +26,14 @@ extension NETunnelProviderProtocol { } else { serverAddress = "Multiple endpoints" } + username = tunnelConfiguration.interface.name } - - func hasTunnelConfiguration(tunnelConfiguration otherTunnelConfiguration: TunnelConfiguration) -> Bool { - guard let serializedThisTunnelConfiguration = try? JSONEncoder().encode(tunnelConfiguration) else { return false } - guard let serializedOtherTunnelConfiguration = try? JSONEncoder().encode(otherTunnelConfiguration) else { return false } - return serializedThisTunnelConfiguration == serializedOtherTunnelConfiguration + + func tunnelConfiguration(name: String?) -> TunnelConfiguration? { + migrateConfigurationIfNeeded() + guard let serializedConfig = providerConfiguration?[Keys.wgQuickConfig.rawValue] as? String else { return nil } + return try? TunnelConfiguration(serializedConfig, name: name) } } |