TunnelViewModel: Minor refactoring of exclude private IPs handling
Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
parent
6f7214ff38
commit
a355232e09
|
@ -401,39 +401,42 @@ class TunnelViewModel {
|
||||||
"193.0.0.0/8", "194.0.0.0/7", "196.0.0.0/6", "200.0.0.0/5", "208.0.0.0/4"
|
"193.0.0.0/8", "194.0.0.0/7", "196.0.0.0/6", "200.0.0.0/5", "208.0.0.0/4"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
static func excludePrivateIPsFieldStates(isSinglePeer: Bool, allowedIPs: Set<String>) -> (shouldAllowExcludePrivateIPsControl: Bool, excludePrivateIPsValue: Bool) {
|
||||||
|
guard isSinglePeer else {
|
||||||
|
return (shouldAllowExcludePrivateIPsControl: false, excludePrivateIPsValue: false)
|
||||||
|
}
|
||||||
|
let allowedIPStrings = Set<String>(allowedIPs)
|
||||||
|
if allowedIPStrings.contains(TunnelViewModel.PeerData.ipv4DefaultRouteString) {
|
||||||
|
return (shouldAllowExcludePrivateIPsControl: true, excludePrivateIPsValue: false)
|
||||||
|
} else if allowedIPStrings.isSuperset(of: TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String) {
|
||||||
|
return (shouldAllowExcludePrivateIPsControl: true, excludePrivateIPsValue: true)
|
||||||
|
} else {
|
||||||
|
return (shouldAllowExcludePrivateIPsControl: false, excludePrivateIPsValue: false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func updateExcludePrivateIPsFieldState() {
|
func updateExcludePrivateIPsFieldState() {
|
||||||
if scratchpad.isEmpty {
|
if scratchpad.isEmpty {
|
||||||
populateScratchpad()
|
populateScratchpad()
|
||||||
}
|
}
|
||||||
let allowedIPStrings = Set<String>(scratchpad[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines))
|
let allowedIPStrings = Set<String>(scratchpad[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines))
|
||||||
|
(shouldAllowExcludePrivateIPsControl, excludePrivateIPsValue) = TunnelViewModel.PeerData.excludePrivateIPsFieldStates(isSinglePeer: numberOfPeers == 1, allowedIPs: allowedIPStrings)
|
||||||
shouldStronglyRecommendDNS = allowedIPStrings.contains(TunnelViewModel.PeerData.ipv4DefaultRouteString) || allowedIPStrings.isSuperset(of: TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String)
|
shouldStronglyRecommendDNS = allowedIPStrings.contains(TunnelViewModel.PeerData.ipv4DefaultRouteString) || allowedIPStrings.isSuperset(of: TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String)
|
||||||
guard numberOfPeers == 1 else {
|
|
||||||
shouldAllowExcludePrivateIPsControl = false
|
|
||||||
excludePrivateIPsValue = false
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
if allowedIPStrings.contains(TunnelViewModel.PeerData.ipv4DefaultRouteString) {
|
|
||||||
shouldAllowExcludePrivateIPsControl = true
|
static func modifiedAllowedIPs(currentAllowedIPs: [String], excludePrivateIPs: Bool, dnsServers: [String]) -> [String] {
|
||||||
excludePrivateIPsValue = false
|
let ipv6Addresses = currentAllowedIPs.filter { $0.contains(":") }
|
||||||
} else if allowedIPStrings.isSuperset(of: TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String) {
|
if excludePrivateIPs {
|
||||||
shouldAllowExcludePrivateIPsControl = true
|
return ipv6Addresses + TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String + dnsServers
|
||||||
excludePrivateIPsValue = true
|
|
||||||
} else {
|
} else {
|
||||||
shouldAllowExcludePrivateIPsControl = false
|
return ipv6Addresses + [TunnelViewModel.PeerData.ipv4DefaultRouteString]
|
||||||
excludePrivateIPsValue = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func excludePrivateIPsValueChanged(isOn: Bool, dnsServers: String) {
|
func excludePrivateIPsValueChanged(isOn: Bool, dnsServers: String) {
|
||||||
let allowedIPStrings = scratchpad[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines)
|
let allowedIPStrings = scratchpad[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines)
|
||||||
let dnsServerStrings = dnsServers.splitToArray(trimmingCharacters: .whitespacesAndNewlines)
|
let dnsServerStrings = dnsServers.splitToArray(trimmingCharacters: .whitespacesAndNewlines)
|
||||||
let ipv6Addresses = allowedIPStrings.filter { $0.contains(":") }
|
let modifiedAllowedIPStrings = TunnelViewModel.PeerData.modifiedAllowedIPs(currentAllowedIPs: allowedIPStrings, excludePrivateIPs: isOn, dnsServers: dnsServerStrings)
|
||||||
let modifiedAllowedIPStrings: [String]
|
|
||||||
if isOn {
|
|
||||||
modifiedAllowedIPStrings = ipv6Addresses + TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String + dnsServerStrings
|
|
||||||
} else {
|
|
||||||
modifiedAllowedIPStrings = ipv6Addresses + [TunnelViewModel.PeerData.ipv4DefaultRouteString]
|
|
||||||
}
|
|
||||||
scratchpad[.allowedIPs] = modifiedAllowedIPStrings.joined(separator: ", ")
|
scratchpad[.allowedIPs] = modifiedAllowedIPStrings.joined(separator: ", ")
|
||||||
validatedConfiguration = nil
|
validatedConfiguration = nil
|
||||||
excludePrivateIPsValue = isOn
|
excludePrivateIPsValue = isOn
|
||||||
|
|
Loading…
Reference in New Issue