]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Nuke trailing spaces
authorJason A. Donenfeld <Jason@zx2c4.com>
Fri, 21 Dec 2018 22:34:56 +0000 (23:34 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 21 Dec 2018 22:34:56 +0000 (23:34 +0100)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
26 files changed:
WireGuard/Shared/LegacyConfigMigration.swift
WireGuard/Shared/Logging/Logger.swift
WireGuard/Shared/Model/DNSServer.swift
WireGuard/Shared/Model/Endpoint.swift
WireGuard/Shared/Model/IPAddressRange.swift
WireGuard/Shared/Model/InterfaceConfiguration.swift
WireGuard/Shared/Model/PeerConfiguration.swift
WireGuard/Shared/NETunnelProviderProtocol+Extension.swift
WireGuard/Shared/String+ArrayConversion.swift
WireGuard/Shared/TunnelConfiguration+WgQuickConfig.swift
WireGuard/WireGuard/Tunnel/TunnelErrors.swift
WireGuard/WireGuard/Tunnel/TunnelStatus.swift
WireGuard/WireGuard/Tunnel/TunnelsManager.swift
WireGuard/WireGuard/UI/iOS/View/BorderedTextButton.swift
WireGuard/WireGuard/UI/iOS/View/ButtonCell.swift
WireGuard/WireGuard/UI/iOS/View/CheckmarkCell.swift
WireGuard/WireGuard/UI/iOS/View/KeyValueCell.swift
WireGuard/WireGuard/UI/iOS/View/SwitchCell.swift
WireGuard/WireGuard/UI/iOS/View/TunnelEditKeyValueCell.swift
WireGuard/WireGuard/UI/iOS/View/TunnelListCell.swift
WireGuard/WireGuard/UI/iOS/ViewController/SettingsTableViewController.swift
WireGuard/WireGuard/UI/iOS/ViewController/TunnelDetailTableViewController.swift
WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift
WireGuard/WireGuard/WireGuardAppError.swift
WireGuard/WireGuardNetworkExtension/DNSResolver.swift
WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift

index e7588a28fd9dab7b04d8e24e952b14892d1ee14e..6d27fa533745124430123ffff1ad54dd1255f01d 100644 (file)
@@ -7,17 +7,17 @@ import NetworkExtension
 
 protocol LegacyModel: Decodable {
     associatedtype Model
-    
+
     var migrated: Model { get }
 }
 
 struct LegacyDNSServer: LegacyModel {
     let address: IPAddress
-    
+
     var migrated: DNSServer {
         return DNSServer(address: address)
     }
-    
+
     init(from decoder: Decoder) throws {
         let container = try decoder.singleValueContainer()
         var data = try container.decode(Data.self)
@@ -33,7 +33,7 @@ struct LegacyDNSServer: LegacyModel {
         }
         address = ipAddress
     }
-    
+
     enum DecodingError: Error {
         case invalidData
     }
@@ -48,11 +48,11 @@ extension Array where Element == LegacyDNSServer {
 struct LegacyEndpoint: LegacyModel {
     let host: Network.NWEndpoint.Host
     let port: Network.NWEndpoint.Port
-    
+
     var migrated: Endpoint {
         return Endpoint(host: host, port: port)
     }
-    
+
     public init(from decoder: Decoder) throws {
         let container = try decoder.singleValueContainer()
         let endpointString = try container.decode(String.self)
@@ -81,7 +81,7 @@ struct LegacyEndpoint: LegacyModel {
         host = NWEndpoint.Host(hostString)
         port = endpointPort
     }
-    
+
     enum DecodingError: Error {
         case invalidData
     }
@@ -94,7 +94,7 @@ struct LegacyInterfaceConfiguration: LegacyModel {
     let listenPort: UInt16?
     let mtu: UInt16?
     let dns: [LegacyDNSServer]
-    
+
     var migrated: InterfaceConfiguration {
         var interface = InterfaceConfiguration(name: name, privateKey: privateKey)
         interface.addresses = addresses.migrated
@@ -108,11 +108,11 @@ struct LegacyInterfaceConfiguration: LegacyModel {
 struct LegacyIPAddressRange: LegacyModel {
     let address: IPAddress
     let networkPrefixLength: UInt8
-    
+
     var migrated: IPAddressRange {
         return IPAddressRange(address: address, networkPrefixLength: networkPrefixLength)
     }
-    
+
     public init(from decoder: Decoder) throws {
         let container = try decoder.singleValueContainer()
         var data = try container.decode(Data.self)
@@ -127,7 +127,7 @@ struct LegacyIPAddressRange: LegacyModel {
         guard let ipAddress = ipAddressFromData else { throw DecodingError.invalidData }
         address = ipAddress
     }
-    
+
     enum DecodingError: Error {
         case invalidData
     }
@@ -145,7 +145,7 @@ struct LegacyPeerConfiguration: LegacyModel {
     let allowedIPs: [LegacyIPAddressRange]
     let endpoint: LegacyEndpoint?
     let persistentKeepAlive: UInt16?
-    
+
     var migrated: PeerConfiguration {
         var configuration = PeerConfiguration(publicKey: publicKey)
         configuration.preSharedKey = preSharedKey
@@ -165,14 +165,14 @@ extension Array where Element == LegacyPeerConfiguration {
 final class LegacyTunnelConfiguration: LegacyModel {
     let interface: LegacyInterfaceConfiguration
     let peers: [LegacyPeerConfiguration]
-    
+
     var migrated: TunnelConfiguration {
         return TunnelConfiguration(interface: interface.migrated, peers: peers.migrated)
     }
 }
 
 extension NETunnelProviderProtocol {
-    
+
     @discardableResult
     func migrateConfigurationIfNeeded() -> Bool {
         guard let configurationVersion = providerConfiguration?["tunnelConfigurationVersion"] as? Int else { return false }
@@ -183,11 +183,11 @@ extension NETunnelProviderProtocol {
         }
         return true
     }
-    
+
     private func migrateFromConfigurationV1() {
         guard let serializedTunnelConfiguration = providerConfiguration?["tunnelConfiguration"] as? Data else { return }
-        guard let configuration = try? JSONDecoder().decode(LegacyTunnelConfiguration.self, from: serializedTunnelConfiguration) else { return }        
+        guard let configuration = try? JSONDecoder().decode(LegacyTunnelConfiguration.self, from: serializedTunnelConfiguration) else { return }
         providerConfiguration = [Keys.wgQuickConfig.rawValue: configuration.migrated.asWgQuickConfig()]
     }
-    
+
 }
index 026ec09d6dcc2ccdfef066857a18d94c2c908268..f2c037142ea9150565a36b64dd9a91a2756b44b4 100644 (file)
@@ -8,7 +8,7 @@ public class Logger {
     enum LoggerError: Error {
         case openFailure
     }
-    
+
     static var global: Logger?
 
     var log: OpaquePointer
index 9078b598d4ca35eb093fbbafc5269ea855a38525..710c656c31a477d3d04b8ee5b17f48184ed506a0 100644 (file)
@@ -6,7 +6,7 @@ import Network
 
 struct DNSServer {
     let address: IPAddress
-    
+
     init(address: IPAddress) {
         self.address = address
     }
@@ -16,7 +16,7 @@ extension DNSServer {
     var stringRepresentation: String {
         return "\(address)"
     }
-    
+
     init?(from addressString: String) {
         if let addr = IPv4Address(addressString) {
             address = addr
index b29a5a8d31d925a165f990102eb08aca965bb01e..03de1318766ad8690f53971a59a16d24136013df 100644 (file)
@@ -7,7 +7,7 @@ import Network
 struct Endpoint {
     let host: NWEndpoint.Host
     let port: NWEndpoint.Port
-    
+
     init(host: NWEndpoint.Host, port: NWEndpoint.Port) {
         self.host = host
         self.port = port
@@ -25,7 +25,7 @@ extension Endpoint {
             return "[\(address)]:\(port)"
         }
     }
-    
+
     init?(from string: String) {
         // Separation of host and port is based on 'parse_endpoint' function in
         // https://git.zx2c4.com/WireGuard/tree/src/tools/config.c
index 28f3d005b6eb4be320893900e1f54ce2c3f8e5f2..7d3e5ecae487ce3f5c3a5e6deac1d162a2b62101 100644 (file)
@@ -7,7 +7,7 @@ import Network
 struct IPAddressRange {
     let address: IPAddress
     var networkPrefixLength: UInt8
-    
+
     init(address: IPAddress, networkPrefixLength: UInt8) {
         self.address = address
         self.networkPrefixLength = networkPrefixLength
@@ -18,13 +18,13 @@ extension IPAddressRange {
     var stringRepresentation: String {
         return "\(address)/\(networkPrefixLength)"
     }
-    
+
     init?(from string: String) {
         guard let parsed = IPAddressRange.parseAddressString(string) else { return nil }
         address = parsed.0
         networkPrefixLength = parsed.1
     }
-    
+
     private static func parseAddressString(_ string: String) -> (IPAddress, UInt8)? {
         let endOfIPAddress = string.lastIndex(of: "/") ?? string.endIndex
         let addressString = String(string[string.startIndex ..< endOfIPAddress])
@@ -36,7 +36,7 @@ extension IPAddressRange {
         } else {
             return nil
         }
-        
+
         let maxNetworkPrefixLength: UInt8 = address is IPv4Address ? 32 : 128
         var networkPrefixLength: UInt8
         if endOfIPAddress < string.endIndex { // "/" was located
@@ -48,7 +48,7 @@ extension IPAddressRange {
         } else {
             networkPrefixLength = maxNetworkPrefixLength
         }
-        
+
         return (address, networkPrefixLength)
     }
 }
index 9094d149b90f92be6020c9efe4f37ff21a7f1bc4..ff804a6a72dbab586ff768924ca1ecc588b91eed 100644 (file)
@@ -10,7 +10,7 @@ struct InterfaceConfiguration {
     var listenPort: UInt16?
     var mtu: UInt16?
     var dns = [DNSServer]()
-    
+
     init(name: String?, privateKey: Data) {
         self.name = name
         self.privateKey = privateKey
index a113821d54405e037fb80967325c15402383bbd7..2e969e6c39ad55e9af452cc3049ab7d37500d761 100644 (file)
@@ -17,7 +17,7 @@ struct PeerConfiguration {
     var allowedIPs = [IPAddressRange]()
     var endpoint: Endpoint?
     var persistentKeepAlive: UInt16?
-    
+
     init(publicKey: Data) {
         self.publicKey = publicKey
         if publicKey.count != TunnelConfiguration.keyLength {
index 4f3e1224009ca5b8e6be7a7e5248035c57f4e676..2f6ea1f6c68a244f336d5ae7efe83fe8183b0370 100644 (file)
@@ -6,18 +6,18 @@ import NetworkExtension
 private var tunnelNameKey: Void?
 
 extension NETunnelProviderProtocol {
-    
+
     enum Keys: String {
         case wgQuickConfig = "WgQuickConfig"
     }
-    
+
     convenience init?(tunnelConfiguration: TunnelConfiguration) {
         self.init()
-        
+
         let appId = Bundle.main.bundleIdentifier!
         providerBundleIdentifier = "\(appId).network-extension"
         providerConfiguration = [Keys.wgQuickConfig.rawValue: tunnelConfiguration.asWgQuickConfig()]
-        
+
         let endpoints = tunnelConfiguration.peers.compactMap { $0.endpoint }
         if endpoints.count == 1 {
             serverAddress = endpoints[0].stringRepresentation
@@ -26,14 +26,14 @@ extension NETunnelProviderProtocol {
         } else {
             serverAddress = "Multiple endpoints"
         }
-        
+
         username = tunnelConfiguration.interface.name
     }
-    
+
     func tunnelConfiguration(name: String?) -> TunnelConfiguration? {
         migrateConfigurationIfNeeded()
         guard let serializedConfig = providerConfiguration?[Keys.wgQuickConfig.rawValue] as? String else { return nil }
         return try? TunnelConfiguration(serializedConfig, name: name)
     }
-    
+
 }
index 9b69cf4159477342411c0c1c32c6a63d56e9ff5b..6a3e7948e48278812e8bf086a1443015f5d4d2f3 100644 (file)
@@ -4,7 +4,7 @@
 import Foundation
 
 extension String {
-    
+
     func splitToArray(separator: Character = ",", trimmingCharacters: CharacterSet? = nil) -> [String] {
         return split(separator: separator)
             .map {
@@ -15,11 +15,11 @@ extension String {
                 }
         }
     }
-    
+
 }
 
 extension Optional where Wrapped == String {
-    
+
     func splitToArray(separator: Character = ",", trimmingCharacters: CharacterSet? = nil) -> [String] {
         switch self {
         case .none:
@@ -28,5 +28,5 @@ extension Optional where Wrapped == String {
             return wrapped.splitToArray(separator: separator, trimmingCharacters: trimmingCharacters)
         }
     }
-    
+
 }
index 91214261cb7557ab4d372f848bba85344508729d..96b5413a551ad508da9207cb3d3dee63bcd90d13 100644 (file)
@@ -4,13 +4,13 @@
 import Foundation
 
 extension TunnelConfiguration {
-    
+
     enum ParserState {
         case inInterfaceSection
         case inPeerSection
         case notInASection
     }
-    
+
     enum ParseError: Error {
         case invalidLine(_ line: String.SubSequence)
         case noInterface
@@ -19,17 +19,17 @@ extension TunnelConfiguration {
         case multiplePeersWithSamePublicKey
         case invalidPeer
     }
-    
+
     //swiftlint:disable:next cyclomatic_complexity function_body_length
     convenience init(_ wgQuickConfig: String, name: String?) throws {
         var interfaceConfiguration: InterfaceConfiguration?
         var peerConfigurations = [PeerConfiguration]()
-        
+
         let lines = wgQuickConfig.split(separator: "\n")
-        
+
         var parserState = ParserState.notInASection
         var attributes = [String: String]()
-        
+
         for (lineIndex, line) in lines.enumerated() {
             var trimmedLine: String
             if let commentRange = line.range(of: "#") {
@@ -37,12 +37,12 @@ extension TunnelConfiguration {
             } else {
                 trimmedLine = String(line)
             }
-            
+
             trimmedLine = trimmedLine.trimmingCharacters(in: .whitespaces)
-            
+
             guard !trimmedLine.isEmpty else { continue }
             let lowercasedLine = line.lowercased()
-            
+
             if let equalsIndex = line.firstIndex(of: "=") {
                 // Line contains an attribute
                 let key = line[..<equalsIndex].trimmingCharacters(in: .whitespaces).lowercased()
@@ -56,9 +56,9 @@ extension TunnelConfiguration {
             } else if lowercasedLine != "[interface]" && lowercasedLine != "[peer]" {
                 throw ParseError.invalidLine(line)
             }
-            
+
             let isLastLine = lineIndex == lines.count - 1
-            
+
             if isLastLine || lowercasedLine == "[interface]" || lowercasedLine == "[peer]" {
                 // Previous section has ended; process the attributes collected so far
                 if parserState == .inInterfaceSection {
@@ -70,7 +70,7 @@ extension TunnelConfiguration {
                     peerConfigurations.append(peer)
                 }
             }
-            
+
             if lowercasedLine == "[interface]" {
                 parserState = .inInterfaceSection
                 attributes.removeAll()
@@ -79,20 +79,20 @@ extension TunnelConfiguration {
                 attributes.removeAll()
             }
         }
-        
+
         let peerPublicKeysArray = peerConfigurations.map { $0.publicKey }
         let peerPublicKeysSet = Set<Data>(peerPublicKeysArray)
         if peerPublicKeysArray.count != peerPublicKeysSet.count {
             throw ParseError.multiplePeersWithSamePublicKey
         }
-        
+
         if let interfaceConfiguration = interfaceConfiguration {
             self.init(interface: interfaceConfiguration, peers: peerConfigurations)
         } else {
             throw ParseError.noInterface
         }
     }
-    
+
     func asWgQuickConfig() -> String {
         var output = "[Interface]\n"
         output.append("PrivateKey = \(interface.privateKey.base64EncodedString())\n")
@@ -110,7 +110,7 @@ extension TunnelConfiguration {
         if let mtu = interface.mtu {
             output.append("MTU = \(mtu)\n")
         }
-        
+
         for peer in peers {
             output.append("\n[Peer]\n")
             output.append("PublicKey = \(peer.publicKey.base64EncodedString())\n")
@@ -128,10 +128,10 @@ extension TunnelConfiguration {
                 output.append("PersistentKeepalive = \(persistentKeepAlive)\n")
             }
         }
-        
+
         return output
     }
-    
+
     //swiftlint:disable:next cyclomatic_complexity
     private static func collate(interfaceAttributes attributes: [String: String], name: String?) -> InterfaceConfiguration? {
         // required wg fields
@@ -166,7 +166,7 @@ extension TunnelConfiguration {
         }
         return interface
     }
-    
+
     //swiftlint:disable:next cyclomatic_complexity
     private static func collate(peerAttributes attributes: [String: String]) -> PeerConfiguration? {
         // required wg fields
@@ -196,5 +196,5 @@ extension TunnelConfiguration {
         }
         return peer
     }
-    
+
 }
index 9b2b57401918a40d3c8e2d0edcc53dee503bd5b3..77b04109a11298e53bfb89b6048a83b8c03588b5 100644 (file)
@@ -53,7 +53,7 @@ enum TunnelsManagerActivationAttemptError: WireGuardAppError {
 enum TunnelsManagerActivationError: WireGuardAppError {
     case activationFailed(wasOnDemandEnabled: Bool)
     case activationFailedWithExtensionError(title: String, message: String, wasOnDemandEnabled: Bool)
-    
+
     var alertText: AlertText {
         switch self {
         case .activationFailed(let wasOnDemandEnabled):
index 9f0341723f1e438055441028c240026885db6642..cfa1307bc3d6ebd50bd8e88387a1728b5cfdae87 100644 (file)
@@ -12,7 +12,7 @@ import NetworkExtension
     case reasserting // Not a possible state at present
     case restarting // Restarting tunnel (done after saving modifications to an active tunnel)
     case waiting    // Waiting for another tunnel to be brought down
-    
+
     init(from systemStatus: NEVPNStatus) {
         switch systemStatus {
         case .connected:
index 903dfadcddc565ce538b91c64ed53f281f6de6ac..5fa8e7ee2bf187d6f7eeb303956d6a4ae10d407a 100644 (file)
@@ -41,7 +41,7 @@ class TunnelsManager {
                 completionHandler(.failure(TunnelsManagerError.systemErrorOnListingTunnels(systemError: error)))
                 return
             }
-            
+
             let tunnelManagers = managers ?? []
             tunnelManagers.forEach { tunnelManager in
                 if (tunnelManager.protocolConfiguration as? NETunnelProviderProtocol)?.migrateConfigurationIfNeeded() == true {
@@ -78,9 +78,9 @@ class TunnelsManager {
                 completionHandler(.failure(TunnelsManagerError.systemErrorOnAddTunnel(systemError: error!)))
                 return
             }
-            
+
             guard let self = self else { return }
-            
+
             let tunnel = TunnelContainer(tunnel: tunnelProviderManager)
             self.tunnels.append(tunnel)
             self.tunnels.sort { $0.name < $1.name }
@@ -126,7 +126,7 @@ class TunnelsManager {
         tunnelProviderManager.protocolConfiguration = NETunnelProviderProtocol(tunnelConfiguration: tunnelConfiguration)
         tunnelProviderManager.localizedDescription = (tunnelConfiguration).interface.name
         tunnelProviderManager.isEnabled = true
-        
+
         let isActivatingOnDemand = !tunnelProviderManager.isOnDemandEnabled && activateOnDemandSetting.isActivateOnDemandEnabled
         activateOnDemandSetting.apply(on: tunnelProviderManager)
 
@@ -137,7 +137,7 @@ class TunnelsManager {
                 return
             }
             guard let self = self else { return }
-            
+
             if isNameChanged {
                 let oldIndex = self.tunnels.firstIndex(of: tunnel)!
                 self.tunnels.sort { $0.name < $1.name }
@@ -351,11 +351,11 @@ class TunnelContainer: NSObject {
     var tunnelConfiguration: TunnelConfiguration? {
         return (tunnelProvider.protocolConfiguration as? NETunnelProviderProtocol)?.tunnelConfiguration(name: tunnelProvider.localizedDescription)
     }
-    
+
     var activateOnDemandSetting: ActivateOnDemandSetting {
         return ActivateOnDemandSetting(from: tunnelProvider)
     }
-    
+
     init(tunnel: NETunnelProviderManager) {
         name = tunnel.localizedDescription ?? "Unnamed"
         let status = TunnelStatus(from: tunnel.connection.status)
index ab6dcc50bd37866d58729f1f9bad0b3d9e88ce84..b1951e4012d4f6241e547bf4014c182efddca9d1 100644 (file)
@@ -10,42 +10,42 @@ class BorderedTextButton: UIView {
         button.titleLabel?.adjustsFontForContentSizeCategory = true
         return button
     }()
-    
+
     override var intrinsicContentSize: CGSize {
         let buttonSize = button.intrinsicContentSize
         return CGSize(width: buttonSize.width + 32, height: buttonSize.height + 16)
     }
-    
+
     var title: String {
         get { return button.title(for: .normal) ?? "" }
         set(value) { button.setTitle(value, for: .normal) }
     }
-    
+
     var onTapped: (() -> Void)?
-    
+
     init() {
         super.init(frame: CGRect.zero)
-        
+
         layer.borderWidth = 1
         layer.cornerRadius = 5
         layer.borderColor = button.tintColor.cgColor
-        
+
         addSubview(button)
         button.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
             button.centerXAnchor.constraint(equalTo: centerXAnchor),
             button.centerYAnchor.constraint(equalTo: centerYAnchor)
         ])
-        
+
         button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
     }
-    
+
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
     @objc func buttonTapped() {
         onTapped?()
     }
-    
+
 }
index aff17ee7666743f1e6f04c6cc9f95bb85069288d..5d9ab92bfb8b46a0a55196f6a58442c01dd3cb0a 100644 (file)
@@ -13,20 +13,20 @@ class ButtonCell: UITableViewCell {
         set(value) { button.tintColor = value ? .red : buttonStandardTintColor }
     }
     var onTapped: (() -> Void)?
-    
+
     let button: UIButton = {
         let button = UIButton(type: .system)
         button.titleLabel?.font = UIFont.preferredFont(forTextStyle: .body)
         button.titleLabel?.adjustsFontForContentSizeCategory = true
         return button
     }()
-    
+
     var buttonStandardTintColor: UIColor
-    
+
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         buttonStandardTintColor = button.tintColor
         super.init(style: style, reuseIdentifier: reuseIdentifier)
-        
+
         contentView.addSubview(button)
         button.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
@@ -34,18 +34,18 @@ class ButtonCell: UITableViewCell {
             contentView.layoutMarginsGuide.bottomAnchor.constraint(equalTo: button.bottomAnchor),
             button.centerXAnchor.constraint(equalTo: contentView.centerXAnchor)
         ])
-        
+
         button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
     }
-    
+
     @objc func buttonTapped() {
         onTapped?()
     }
-    
+
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
     override func prepareForReuse() {
         super.prepareForReuse()
         buttonText = ""
index db4b6c95be9bbb37b7fc7d9e6c572f91af2f0b98..77cd501fddcf4eb70a3008f818567833cb35b127 100644 (file)
@@ -13,16 +13,16 @@ class CheckmarkCell: UITableViewCell {
             accessoryType = isChecked ? .checkmark : .none
         }
     }
-    
+
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         isChecked = false
         super.init(style: .default, reuseIdentifier: reuseIdentifier)
     }
-    
+
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
     override func prepareForReuse() {
         super.prepareForReuse()
         message = ""
index a456de1ef6b132dcf6d656328cce889eae44977c..81a171298a3ad4d0ecb081b14b643816aed1f7e8 100644 (file)
@@ -4,7 +4,7 @@
 import UIKit
 
 class KeyValueCell: UITableViewCell {
-    
+
     let keyLabel: UILabel = {
         let keyLabel = UILabel()
         keyLabel.font = UIFont.preferredFont(forTextStyle: .body)
@@ -13,7 +13,7 @@ class KeyValueCell: UITableViewCell {
         keyLabel.textAlignment = .left
         return keyLabel
     }()
-    
+
     let valueLabelScrollView: UIScrollView = {
         let scrollView = UIScrollView(frame: .zero)
         scrollView.isDirectionalLockEnabled = true
@@ -21,7 +21,7 @@ class KeyValueCell: UITableViewCell {
         scrollView.showsVerticalScrollIndicator = false
         return scrollView
     }()
-    
+
     let valueTextField: UITextField = {
         let valueTextField = UITextField()
         valueTextField.textAlignment = .right
@@ -34,7 +34,7 @@ class KeyValueCell: UITableViewCell {
         valueTextField.textColor = .gray
         return valueTextField
     }()
-    
+
     var copyableGesture = true
 
     var key: String {
@@ -53,7 +53,7 @@ class KeyValueCell: UITableViewCell {
         get { return valueTextField.keyboardType }
         set(value) { valueTextField.keyboardType = value }
     }
-    
+
     var isValueValid = true {
         didSet {
             if isValueValid {
@@ -63,26 +63,26 @@ class KeyValueCell: UITableViewCell {
             }
         }
     }
-    
+
     var isStackedHorizontally = false
     var isStackedVertically = false
     var contentSizeBasedConstraints = [NSLayoutConstraint]()
-    
+
     var onValueChanged: ((String) -> Void)?
     var onValueBeingEdited: ((String) -> Void)?
-        
+
     private var textFieldValueOnBeginEditing: String = ""
-    
+
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
-        
+
         contentView.addSubview(keyLabel)
         keyLabel.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
             keyLabel.leftAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leftAnchor),
             keyLabel.topAnchor.constraint(equalToSystemSpacingBelow: contentView.layoutMarginsGuide.topAnchor, multiplier: 0.5)
         ])
-        
+
         valueTextField.delegate = self
         valueLabelScrollView.addSubview(valueTextField)
         valueTextField.translatesAutoresizingMaskIntoConstraints = false
@@ -96,31 +96,31 @@ class KeyValueCell: UITableViewCell {
         let expandToFitValueLabelConstraint = NSLayoutConstraint(item: valueTextField, attribute: .width, relatedBy: .equal, toItem: valueLabelScrollView, attribute: .width, multiplier: 1, constant: 0)
         expandToFitValueLabelConstraint.priority = .defaultLow + 1
         expandToFitValueLabelConstraint.isActive = true
-        
+
         contentView.addSubview(valueLabelScrollView)
-        
+
         contentView.addSubview(valueLabelScrollView)
         valueLabelScrollView.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
             valueLabelScrollView.rightAnchor.constraint(equalTo: contentView.layoutMarginsGuide.rightAnchor),
             contentView.layoutMarginsGuide.bottomAnchor.constraint(equalToSystemSpacingBelow: valueLabelScrollView.bottomAnchor, multiplier: 0.5)
         ])
-        
+
         keyLabel.setContentCompressionResistancePriority(.defaultHigh + 1, for: .horizontal)
         keyLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
         valueLabelScrollView.setContentHuggingPriority(.defaultLow, for: .horizontal)
-        
+
         let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture(_:)))
         addGestureRecognizer(gestureRecognizer)
         isUserInteractionEnabled = true
-        
+
         configureForContentSize()
     }
-    
+
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
     func configureForContentSize() {
         var constraints = [NSLayoutConstraint]()
         if traitCollection.preferredContentSizeCategory.isAccessibilityCategory {
@@ -152,13 +152,13 @@ class KeyValueCell: UITableViewCell {
             contentSizeBasedConstraints = constraints
         }
     }
-    
+
     @objc func handleTapGesture(_ recognizer: UIGestureRecognizer) {
         if !copyableGesture {
             return
         }
         guard recognizer.state == .recognized else { return }
-        
+
         if let recognizerView = recognizer.view,
             let recognizerSuperView = recognizerView.superview, recognizerView.becomeFirstResponder() {
             let menuController = UIMenuController.shared
@@ -166,19 +166,19 @@ class KeyValueCell: UITableViewCell {
             menuController.setMenuVisible(true, animated: true)
         }
     }
-    
+
     override var canBecomeFirstResponder: Bool {
         return true
     }
-    
+
     override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
         return (action == #selector(UIResponderStandardEditActions.copy(_:)))
     }
-    
+
     override func copy(_ sender: Any?) {
         UIPasteboard.general.string = valueTextField.text
     }
-    
+
     override func prepareForReuse() {
         super.prepareForReuse()
         copyableGesture = true
@@ -194,18 +194,18 @@ class KeyValueCell: UITableViewCell {
 }
 
 extension KeyValueCell: UITextFieldDelegate {
-    
+
     func textFieldDidBeginEditing(_ textField: UITextField) {
         textFieldValueOnBeginEditing = textField.text ?? ""
         isValueValid = true
     }
-    
+
     func textFieldDidEndEditing(_ textField: UITextField) {
         let isModified = textField.text ?? "" != textFieldValueOnBeginEditing
         guard isModified else { return }
         onValueChanged?(textField.text ?? "")
     }
-    
+
     func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
         if let onValueBeingEdited = onValueBeingEdited {
             let modifiedText = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string)
@@ -213,5 +213,5 @@ extension KeyValueCell: UITextFieldDelegate {
         }
         return true
     }
-    
+
 }
index d0c29aac1d2294a3291188b0f319f4aa19ed560c..68939a7a78096fe73b87ceea1f5c3f5b16501fe3 100644 (file)
@@ -19,14 +19,14 @@ class SwitchCell: UITableViewCell {
             textLabel?.textColor = value ? .black : .gray
         }
     }
-    
+
     var onSwitchToggled: ((Bool) -> Void)?
-    
+
     let switchView = UISwitch()
-    
+
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: .default, reuseIdentifier: reuseIdentifier)
-        
+
         accessoryView = switchView
         switchView.addTarget(self, action: #selector(switchToggled), for: .valueChanged)
     }
@@ -34,11 +34,11 @@ class SwitchCell: UITableViewCell {
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
     @objc func switchToggled() {
         onSwitchToggled?(switchView.isOn)
     }
-    
+
     override func prepareForReuse() {
         super.prepareForReuse()
         isEnabled = true
index fc9595fa03bb47175781b06c08c4fb06712c78e3..57132d60e9be8d0a41afc3b547adbef81b99e083 100644 (file)
@@ -4,40 +4,40 @@
 import UIKit
 
 class TunnelEditKeyValueCell: KeyValueCell {
-    
+
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
-        
+
         keyLabel.textAlignment = .right
         valueTextField.textAlignment = .left
-        
+
         let widthRatioConstraint = NSLayoutConstraint(item: keyLabel, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 0.4, constant: 0)
         // In case the key doesn't fit into 0.4 * width,
         // set a CR priority > the 0.4-constraint's priority.
         widthRatioConstraint.priority = .defaultHigh + 1
         widthRatioConstraint.isActive = true
     }
-    
+
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
 }
 
 class TunnelEditEditableKeyValueCell: TunnelEditKeyValueCell {
-    
+
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
-        
+
         copyableGesture = false
         valueTextField.textColor = .black
         valueTextField.isEnabled = true
         valueLabelScrollView.isScrollEnabled = false
         valueTextField.widthAnchor.constraint(equalTo: valueLabelScrollView.widthAnchor).isActive = true
     }
-    
+
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
 }
index d13346a0c20a5f93ba3081587ebb89a91ae321c7..2965476a812fc68b2bc16cccfed01261da118c85 100644 (file)
@@ -19,7 +19,7 @@ class TunnelListCell: UITableViewCell {
         }
     }
     var onSwitchToggled: ((Bool) -> Void)?
-    
+
     let nameLabel: UILabel = {
         let nameLabel = UILabel()
         nameLabel.font = UIFont.preferredFont(forTextStyle: .body)
@@ -27,35 +27,35 @@ class TunnelListCell: UITableViewCell {
         nameLabel.numberOfLines = 0
         return nameLabel
     }()
-    
+
     let busyIndicator: UIActivityIndicatorView = {
         let busyIndicator = UIActivityIndicatorView(style: .gray)
         busyIndicator.hidesWhenStopped = true
         return busyIndicator
     }()
-    
+
     let statusSwitch = UISwitch()
-    
+
     private var statusObservationToken: AnyObject?
     private var nameObservationToken: AnyObject?
-    
+
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
-        
+
         contentView.addSubview(statusSwitch)
         statusSwitch.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
             statusSwitch.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
             contentView.rightAnchor.constraint(equalTo: statusSwitch.rightAnchor)
         ])
-        
+
         contentView.addSubview(busyIndicator)
         busyIndicator.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
             busyIndicator.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
             statusSwitch.leftAnchor.constraint(equalToSystemSpacingAfter: busyIndicator.rightAnchor, multiplier: 1)
         ])
-        
+
         contentView.addSubview(nameLabel)
         nameLabel.translatesAutoresizingMaskIntoConstraints = false
         nameLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
@@ -67,16 +67,16 @@ class TunnelListCell: UITableViewCell {
             busyIndicator.leftAnchor.constraint(equalToSystemSpacingAfter: nameLabel.rightAnchor, multiplier: 1),
             bottomAnchorConstraint
         ])
-        
+
         accessoryType = .disclosureIndicator
-        
+
         statusSwitch.addTarget(self, action: #selector(switchToggled), for: .valueChanged)
     }
-    
+
     @objc func switchToggled() {
         onSwitchToggled?(statusSwitch.isOn)
     }
-    
+
     private func update(from status: TunnelStatus?) {
         guard let status = status else {
             reset()
@@ -93,17 +93,17 @@ class TunnelListCell: UITableViewCell {
             }
         }
     }
-    
+
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
     private func reset() {
         statusSwitch.isOn = false
         statusSwitch.isUserInteractionEnabled = false
         busyIndicator.stopAnimating()
     }
-    
+
     override func prepareForReuse() {
         super.prepareForReuse()
         reset()
index 426e0534290d2479949823fbdccaf639a6d7abda..58f861142693ef90318e73372200a789dd13d60e 100644 (file)
@@ -58,12 +58,12 @@ class SettingsTableViewController: UITableViewController {
     override func viewDidLayoutSubviews() {
         super.viewDidLayoutSubviews()
         guard let logo = tableView.tableFooterView else { return }
-        
+
         let bottomPadding = max(tableView.layoutMargins.bottom, 10)
         let fullHeight = max(tableView.contentSize.height, tableView.bounds.size.height - tableView.layoutMargins.top - bottomPadding)
-        
+
         let imageAspectRatio = logo.intrinsicContentSize.width / logo.intrinsicContentSize.height
-        
+
         var height = tableView.estimatedRowHeight * 1.5
         var width = height * imageAspectRatio
         let maxWidth = view.bounds.size.width - max(tableView.layoutMargins.left + tableView.layoutMargins.right, 20)
@@ -71,11 +71,11 @@ class SettingsTableViewController: UITableViewController {
             width = maxWidth
             height = width / imageAspectRatio
         }
-        
+
         let needsReload = height != logo.frame.height
-        
+
         logo.frame = CGRect(x: (view.bounds.size.width - width) / 2, y: fullHeight - height, width: width, height: height)
-        
+
         if needsReload {
             tableView.tableFooterView = logo
         }
index 8378311352e9de47b0e274fecd5bdc861287ae64..187f7fd6417356138ffc85548a41894629b74071 100644 (file)
@@ -43,7 +43,7 @@ class TunnelDetailTableViewController: UITableViewController {
     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+
     deinit {
         onDemandStatusObservationToken = nil
         statusObservationToken = nil
@@ -166,7 +166,7 @@ extension TunnelDetailTableViewController {
 
     private func statusCell(for tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
         let cell: SwitchCell = tableView.dequeueReusableCell(for: indexPath)
-        
+
         let statusUpdate: (SwitchCell, TunnelStatus) -> Void = { cell, status in
             let text: String
             switch status {
@@ -192,13 +192,13 @@ extension TunnelDetailTableViewController {
             }
             cell.isEnabled = status == .active || status == .inactive
         }
-        
+
         statusUpdate(cell, tunnel.status)
         statusObservationToken = tunnel.observe(\.status) { [weak cell] tunnel, _ in
             guard let cell = cell else { return }
             statusUpdate(cell, tunnel.status)
         }
-        
+
         cell.onSwitchToggled = { [weak self] isOn in
             guard let self = self else { return }
             if isOn {
index 6dd8e9c2749508b9b861d3fefc8ebdff3c6d7ef7..77952c856b0f8eaadde233eb1416b080acc07a1e 100644 (file)
@@ -17,27 +17,27 @@ class TunnelsListTableViewController: UIViewController {
         tableView.register(TunnelListCell.self)
         return tableView
     }()
-    
+
     let centeredAddButton: BorderedTextButton = {
         let button = BorderedTextButton()
         button.title = tr("tunnelsListCenteredAddTunnelButtonTitle")
         button.isHidden = true
         return button
     }()
-    
+
     let busyIndicator: UIActivityIndicatorView = {
         let busyIndicator = UIActivityIndicatorView(style: .gray)
         busyIndicator.hidesWhenStopped = true
         return busyIndicator
     }()
-    
+
     override func loadView() {
         view = UIView()
         view.backgroundColor = .white
-        
+
         tableView.dataSource = self
         tableView.delegate = self
-        
+
         view.addSubview(tableView)
         tableView.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
@@ -53,22 +53,22 @@ class TunnelsListTableViewController: UIViewController {
             busyIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor),
             busyIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor)
         ])
-        
+
         view.addSubview(centeredAddButton)
         centeredAddButton.translatesAutoresizingMaskIntoConstraints = false
         NSLayoutConstraint.activate([
             centeredAddButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
             centeredAddButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
         ])
-        
+
         centeredAddButton.onTapped = { [weak self] in
             guard let self = self else { return }
             self.addButtonTapped(sender: self.centeredAddButton)
         }
-        
+
         busyIndicator.startAnimating()
     }
-    
+
     override func viewDidLoad() {
         super.viewDidLoad()
 
@@ -82,7 +82,7 @@ class TunnelsListTableViewController: UIViewController {
     func setTunnelsManager(tunnelsManager: TunnelsManager) {
         self.tunnelsManager = tunnelsManager
         tunnelsManager.tunnelsListDelegate = self
-        
+
         busyIndicator.stopAnimating()
         tableView.reloadData()
         centeredAddButton.isHidden = tunnelsManager.numberOfTunnels() > 0
@@ -96,7 +96,7 @@ class TunnelsListTableViewController: UIViewController {
 
     @objc func addButtonTapped(sender: AnyObject) {
         guard tunnelsManager != nil else { return }
-        
+
         let alert = UIAlertController(title: "", message: tr("addTunnelMenuHeader"), preferredStyle: .actionSheet)
         let importFileAction = UIAlertAction(title: tr("addTunnelMenuImportFile"), style: .default) { [weak self] _ in
             self?.presentViewControllerForFileImport()
@@ -129,7 +129,7 @@ class TunnelsListTableViewController: UIViewController {
 
     @objc func settingsButtonTapped(sender: UIBarButtonItem) {
         guard tunnelsManager != nil else { return }
-        
+
         let settingsVC = SettingsTableViewController(tunnelsManager: tunnelsManager)
         let settingsNC = UINavigationController(rootViewController: settingsVC)
         settingsNC.modalPresentationStyle = .formSheet
index 8b725d76f6bc16c7effb7091fccb5bd4b860e7fd..7f80240d14d18ac0985631ce9a2f33b6859163d6 100644 (file)
@@ -3,6 +3,6 @@
 
 protocol WireGuardAppError: Error {
     typealias AlertText = (title: String, message: String)
-    
+
     var alertText: AlertText { get }
 }
index 3929862174acd3a72b4254107f00d8c0c3030192..0a76c209b323c58659d956e446214180637692cf 100644 (file)
@@ -62,7 +62,7 @@ class DNSResolver {
 extension DNSResolver {
     // Based on DNS resolution code by Jason Donenfeld <jason@zx2c4.com>
     // in parse_endpoint() in src/tools/config.c in the WireGuard codebase
-    
+
     //swiftlint:disable:next cyclomatic_complexity
     private static func resolveSync(endpoint: Endpoint) -> Endpoint? {
         switch endpoint.host {
index b2df44041bcd71c1556023fac281325a3428ef6d..df5dd906bad01197e8b525df7db8b5f594e7098e 100644 (file)
@@ -14,7 +14,7 @@ enum PacketTunnelProviderError: Error {
 }
 
 class PacketTunnelProvider: NEPacketTunnelProvider {
-    
+
     private var wgHandle: Int32?
     private var networkMonitor: NWPathMonitor?
     private var lastFirstInterface: NWInterface?