diff options
author | Eric Kuck <eric@bluelinelabs.com> | 2018-12-20 10:46:26 -0600 |
---|---|---|
committer | Eric Kuck <eric@bluelinelabs.com> | 2018-12-20 10:46:26 -0600 |
commit | 5618c465a2e6ee4ccefd005ed439206062cd6ba6 (patch) | |
tree | 8ced66791c2df834dd88303b7a56229c1248cff2 /WireGuard/WireGuard/UI | |
parent | TunnelErrors: Remove unused error (diff) | |
download | wireguard-apple-5618c465a2e6ee4ccefd005ed439206062cd6ba6.tar.xz wireguard-apple-5618c465a2e6ee4ccefd005ed439206062cd6ba6.zip |
Added a String->[String] helper
Signed-off-by: Eric Kuck <eric@bluelinelabs.com>
Diffstat (limited to '')
-rw-r--r-- | WireGuard/WireGuard/UI/TunnelViewModel.swift | 32 | ||||
-rw-r--r-- | WireGuard/WireGuard/UI/iOS/String+ArrayConversion.swift | 32 |
2 files changed, 42 insertions, 22 deletions
diff --git a/WireGuard/WireGuard/UI/TunnelViewModel.swift b/WireGuard/WireGuard/UI/TunnelViewModel.swift index 7e19bb7..1a88da2 100644 --- a/WireGuard/WireGuard/UI/TunnelViewModel.swift +++ b/WireGuard/WireGuard/UI/TunnelViewModel.swift @@ -117,9 +117,8 @@ class TunnelViewModel { var errorMessages = [String]() if let addressesString = scratchpad[.addresses] { var addresses = [IPAddressRange]() - for addressString in addressesString.split(separator: ",") { - let trimmedString = addressString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) - if let address = IPAddressRange(from: trimmedString) { + for addressString in addressesString.splitToArray(trimmingCharacters: .whitespacesAndNewlines) { + if let address = IPAddressRange(from: addressString) { addresses.append(address) } else { fieldsWithError.insert(.addresses) @@ -146,9 +145,8 @@ class TunnelViewModel { } if let dnsString = scratchpad[.dns] { var dnsServers = [DNSServer]() - for dnsServerString in dnsString.split(separator: ",") { - let trimmedString = dnsServerString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) - if let dnsServer = DNSServer(from: trimmedString) { + for dnsServerString in dnsString.splitToArray(trimmingCharacters: .whitespacesAndNewlines) { + if let dnsServer = DNSServer(from: dnsServerString) { dnsServers.append(dnsServer) } else { fieldsWithError.insert(.dns) @@ -169,7 +167,7 @@ class TunnelViewModel { if TunnelViewModel.interfaceFieldsWithControl.contains(field) { return true } - return (!self[field].isEmpty) + return !self[field].isEmpty } // TODO: Cache this to avoid recomputing } @@ -263,9 +261,8 @@ class TunnelViewModel { } if let allowedIPsString = scratchpad[.allowedIPs] { var allowedIPs = [IPAddressRange]() - for allowedIPString in allowedIPsString.split(separator: ",") { - let trimmedString = allowedIPString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) - if let allowedIP = IPAddressRange(from: trimmedString) { + for allowedIPString in allowedIPsString.splitToArray(trimmingCharacters: .whitespacesAndNewlines) { + if let allowedIP = IPAddressRange(from: allowedIPString) { allowedIPs.append(allowedIP) } else { fieldsWithError.insert(.allowedIPs) @@ -326,11 +323,7 @@ class TunnelViewModel { if scratchpad.isEmpty { populateScratchpad() } - let allowedIPStrings = Set<String>( - (scratchpad[.allowedIPs] ?? "") - .split(separator: ",") - .map { $0.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) } - ) + let allowedIPStrings = Set<String>(scratchpad[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines)) if allowedIPStrings.contains(TunnelViewModel.PeerData.ipv4DefaultRouteString) { shouldAllowExcludePrivateIPsControl = true excludePrivateIPsValue = false @@ -344,12 +337,8 @@ class TunnelViewModel { } func excludePrivateIPsValueChanged(isOn: Bool, dnsServers: String) { - let allowedIPStrings = (scratchpad[.allowedIPs] ?? "") - .split(separator: ",") - .map { $0.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) } - let dnsServerStrings = dnsServers - .split(separator: ",") - .map { $0.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) } + let allowedIPStrings = scratchpad[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines) + let dnsServerStrings = dnsServers.splitToArray(trimmingCharacters: .whitespacesAndNewlines) let ipv6Addresses = allowedIPStrings.filter { $0.contains(":") } let modifiedAllowedIPStrings: [String] if isOn { @@ -476,5 +465,4 @@ extension TunnelViewModel { static func defaultActivateOnDemandOption() -> ActivateOnDemandOption { return .useOnDemandOverWiFiOrCellular } - } diff --git a/WireGuard/WireGuard/UI/iOS/String+ArrayConversion.swift b/WireGuard/WireGuard/UI/iOS/String+ArrayConversion.swift new file mode 100644 index 0000000..9b69cf4 --- /dev/null +++ b/WireGuard/WireGuard/UI/iOS/String+ArrayConversion.swift @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2018 WireGuard LLC. All Rights Reserved. + +import Foundation + +extension String { + + func splitToArray(separator: Character = ",", trimmingCharacters: CharacterSet? = nil) -> [String] { + return split(separator: separator) + .map { + if let charSet = trimmingCharacters { + return $0.trimmingCharacters(in: charSet) + } else { + return String($0) + } + } + } + +} + +extension Optional where Wrapped == String { + + func splitToArray(separator: Character = ",", trimmingCharacters: CharacterSet? = nil) -> [String] { + switch self { + case .none: + return [] + case .some(let wrapped): + return wrapped.splitToArray(separator: separator, trimmingCharacters: trimmingCharacters) + } + } + +} |