iOS: On changing DNS, update AllowedIPs with the current DNS servers
This commit is contained in:
parent
e5e5418307
commit
b787ed9f5a
|
@ -432,7 +432,7 @@ class TunnelViewModel {
|
||||||
let normalizedDNSServers = normalizedIPAddressRangeStrings(dnsServers)
|
let normalizedDNSServers = normalizedIPAddressRangeStrings(dnsServers)
|
||||||
let ipv6Addresses = normalizedIPAddressRangeStrings(currentAllowedIPs.filter { $0.contains(":") })
|
let ipv6Addresses = normalizedIPAddressRangeStrings(currentAllowedIPs.filter { $0.contains(":") })
|
||||||
if excludePrivateIPs {
|
if excludePrivateIPs {
|
||||||
return ipv6Addresses + TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String + dnsServers
|
return ipv6Addresses + TunnelViewModel.PeerData.ipv4DefaultRouteModRFC1918String + normalizedDNSServers
|
||||||
} else {
|
} else {
|
||||||
return ipv6Addresses.filter { !normalizedDNSServers.contains($0) } + [TunnelViewModel.PeerData.ipv4DefaultRouteString]
|
return ipv6Addresses.filter { !normalizedDNSServers.contains($0) } + [TunnelViewModel.PeerData.ipv4DefaultRouteString]
|
||||||
}
|
}
|
||||||
|
@ -523,6 +523,17 @@ class TunnelViewModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateDNSServersInAllowedIPsIfRequired(oldDNSServers: String, newDNSServers: String) -> Bool {
|
||||||
|
guard peersData.count == 1, let firstPeer = peersData.first else { return false }
|
||||||
|
guard firstPeer.shouldAllowExcludePrivateIPsControl && firstPeer.excludePrivateIPsValue else { return false }
|
||||||
|
let allowedIPStrings = firstPeer[.allowedIPs].splitToArray(trimmingCharacters: .whitespacesAndNewlines)
|
||||||
|
let oldDNSServerStrings = TunnelViewModel.PeerData.normalizedIPAddressRangeStrings(oldDNSServers.splitToArray(trimmingCharacters: .whitespacesAndNewlines))
|
||||||
|
let newDNSServerStrings = TunnelViewModel.PeerData.normalizedIPAddressRangeStrings(newDNSServers.splitToArray(trimmingCharacters: .whitespacesAndNewlines))
|
||||||
|
let updatedAllowedIPStrings = allowedIPStrings.filter { !oldDNSServerStrings.contains($0) } + newDNSServerStrings
|
||||||
|
firstPeer[.allowedIPs] = updatedAllowedIPStrings.joined(separator: ", ")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func save() -> SaveResult<TunnelConfiguration> {
|
func save() -> SaveResult<TunnelConfiguration> {
|
||||||
let interfaceSaveResult = interfaceData.save()
|
let interfaceSaveResult = interfaceData.save()
|
||||||
let peerSaveResults = peersData.map { $0.save() } // Save all, to help mark erroring fields in red
|
let peerSaveResults = peersData.map { $0.save() } // Save all, to help mark erroring fields in red
|
||||||
|
|
|
@ -68,7 +68,7 @@ class KeyValueCell: UITableViewCell {
|
||||||
var isStackedVertically = false
|
var isStackedVertically = false
|
||||||
var contentSizeBasedConstraints = [NSLayoutConstraint]()
|
var contentSizeBasedConstraints = [NSLayoutConstraint]()
|
||||||
|
|
||||||
var onValueChanged: ((String) -> Void)?
|
var onValueChanged: ((String, String) -> Void)?
|
||||||
var onValueBeingEdited: ((String) -> Void)?
|
var onValueBeingEdited: ((String) -> Void)?
|
||||||
|
|
||||||
var observationToken: AnyObject?
|
var observationToken: AnyObject?
|
||||||
|
@ -206,7 +206,7 @@ extension KeyValueCell: UITextFieldDelegate {
|
||||||
func textFieldDidEndEditing(_ textField: UITextField) {
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
||||||
let isModified = textField.text ?? "" != textFieldValueOnBeginEditing
|
let isModified = textField.text ?? "" != textFieldValueOnBeginEditing
|
||||||
guard isModified else { return }
|
guard isModified else { return }
|
||||||
onValueChanged?(textField.text ?? "")
|
onValueChanged?(textFieldValueOnBeginEditing, textField.text ?? "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
||||||
|
|
|
@ -259,8 +259,18 @@ extension TunnelEditTableViewController {
|
||||||
cell.onValueBeingEdited = { [weak self] value in
|
cell.onValueBeingEdited = { [weak self] value in
|
||||||
self?.tunnelViewModel.interfaceData[field] = value
|
self?.tunnelViewModel.interfaceData[field] = value
|
||||||
}
|
}
|
||||||
|
cell.onValueChanged = { [weak self] oldValue, newValue in
|
||||||
|
guard let self = self else { return }
|
||||||
|
let isAllowedIPsChanged = self.tunnelViewModel.updateDNSServersInAllowedIPsIfRequired(oldDNSServers: oldValue, newDNSServers: newValue)
|
||||||
|
if isAllowedIPsChanged {
|
||||||
|
let section = self.sections.firstIndex { if case .peer(_) = $0 { return true } else { return false } }
|
||||||
|
if let section = section, let row = self.peerFields.firstIndex(of: .allowedIPs) {
|
||||||
|
self.tableView.reloadRows(at: [IndexPath(row: row, section: section)], with: .none)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cell.onValueChanged = { [weak self] value in
|
cell.onValueChanged = { [weak self] _, value in
|
||||||
self?.tunnelViewModel.interfaceData[field] = value
|
self?.tunnelViewModel.interfaceData[field] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -380,7 +390,7 @@ extension TunnelEditTableViewController {
|
||||||
tableView.reloadRows(at: [IndexPath(row: dnsRow, section: firstInterfaceSection + interfaceSubSection)], with: .none)
|
tableView.reloadRows(at: [IndexPath(row: dnsRow, section: firstInterfaceSection + interfaceSubSection)], with: .none)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cell.onValueChanged = { [weak peerData] value in
|
cell.onValueChanged = { [weak peerData] _, value in
|
||||||
peerData?[field] = value
|
peerData?[field] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue