Extend validators to work for DNS entries as well.
This commit is contained in:
parent
5363be2403
commit
93e2264751
|
@ -31,20 +31,28 @@ public enum EndpointValidationError: Error {
|
||||||
|
|
||||||
struct Endpoint {
|
struct Endpoint {
|
||||||
var ipAddress: String
|
var ipAddress: String
|
||||||
var port: Int32
|
var port: Int32?
|
||||||
var addressType: AddressType
|
var addressType: AddressType
|
||||||
|
|
||||||
init?(endpointString: String) throws {
|
init?(endpointString: String, needsPort: Bool = true) throws {
|
||||||
guard let range = endpointString.range(of: ":", options: .backwards, range: nil, locale: nil) else {
|
var ipString: String
|
||||||
throw EndpointValidationError.noIpAndPort(endpointString)
|
if needsPort {
|
||||||
|
guard let range = endpointString.range(of: ":", options: .backwards, range: nil, locale: nil) else {
|
||||||
|
throw EndpointValidationError.noIpAndPort(endpointString)
|
||||||
|
}
|
||||||
|
ipString = String(endpointString[..<range.lowerBound])
|
||||||
|
|
||||||
|
let portString = endpointString[range.upperBound...]
|
||||||
|
|
||||||
|
guard let port = Int32(portString), port > 0 else {
|
||||||
|
throw EndpointValidationError.invalidPort(String(portString/*parts[1]*/))
|
||||||
|
}
|
||||||
|
self.port = port
|
||||||
|
} else {
|
||||||
|
ipString = endpointString
|
||||||
}
|
}
|
||||||
|
|
||||||
let ipString = endpointString[..<range.lowerBound].replacingOccurrences(of: "[", with: "").replacingOccurrences(of: "]", with: "")
|
ipString = ipString.replacingOccurrences(of: "[", with: "").replacingOccurrences(of: "]", with: "")
|
||||||
let portString = endpointString[range.upperBound...]
|
|
||||||
|
|
||||||
guard let port = Int32(portString), port > 0 else {
|
|
||||||
throw EndpointValidationError.invalidPort(String(portString/*parts[1]*/))
|
|
||||||
}
|
|
||||||
|
|
||||||
ipAddress = String(ipString)
|
ipAddress = String(ipString)
|
||||||
let addressType = validateIpAddress(ipToValidate: ipAddress)
|
let addressType = validateIpAddress(ipToValidate: ipAddress)
|
||||||
|
@ -52,8 +60,6 @@ struct Endpoint {
|
||||||
throw EndpointValidationError.invalidIP(ipAddress)
|
throw EndpointValidationError.invalidIP(ipAddress)
|
||||||
}
|
}
|
||||||
self.addressType = addressType
|
self.addressType = addressType
|
||||||
|
|
||||||
self.port = port
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ extension Interface {
|
||||||
|
|
||||||
try dns?.commaSeparatedToArray().forEach { address in
|
try dns?.commaSeparatedToArray().forEach { address in
|
||||||
do {
|
do {
|
||||||
try _ = Endpoint(endpointString: address)
|
try _ = Endpoint(endpointString: address, needsPort: false)
|
||||||
} catch {
|
} catch {
|
||||||
throw InterfaceValidationError.invalidDNSServer(cause: error)
|
throw InterfaceValidationError.invalidDNSServer(cause: error)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue