From 93e22647518301d09d28ca2e08f49f99c3923bfa Mon Sep 17 00:00:00 2001 From: Jeroen Leenarts Date: Thu, 16 Aug 2018 22:41:45 +0200 Subject: [PATCH] Extend validators to work for DNS entries as well. --- Shared/Validators.swift | 30 +++++++++++++--------- WireGuard/Models/Interface+Extension.swift | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Shared/Validators.swift b/Shared/Validators.swift index f065f0e..0b95587 100644 --- a/Shared/Validators.swift +++ b/Shared/Validators.swift @@ -31,20 +31,28 @@ public enum EndpointValidationError: Error { struct Endpoint { var ipAddress: String - var port: Int32 + var port: Int32? var addressType: AddressType - init?(endpointString: String) throws { - guard let range = endpointString.range(of: ":", options: .backwards, range: nil, locale: nil) else { - throw EndpointValidationError.noIpAndPort(endpointString) + init?(endpointString: String, needsPort: Bool = true) throws { + var ipString: String + if needsPort { + guard let range = endpointString.range(of: ":", options: .backwards, range: nil, locale: nil) else { + throw EndpointValidationError.noIpAndPort(endpointString) + } + ipString = String(endpointString[.. 0 else { + throw EndpointValidationError.invalidPort(String(portString/*parts[1]*/)) + } + self.port = port + } else { + ipString = endpointString } - let ipString = endpointString[.. 0 else { - throw EndpointValidationError.invalidPort(String(portString/*parts[1]*/)) - } + ipString = ipString.replacingOccurrences(of: "[", with: "").replacingOccurrences(of: "]", with: "") ipAddress = String(ipString) let addressType = validateIpAddress(ipToValidate: ipAddress) @@ -52,8 +60,6 @@ struct Endpoint { throw EndpointValidationError.invalidIP(ipAddress) } self.addressType = addressType - - self.port = port } } diff --git a/WireGuard/Models/Interface+Extension.swift b/WireGuard/Models/Interface+Extension.swift index 98d0240..78ef567 100644 --- a/WireGuard/Models/Interface+Extension.swift +++ b/WireGuard/Models/Interface+Extension.swift @@ -29,7 +29,7 @@ extension Interface { try dns?.commaSeparatedToArray().forEach { address in do { - try _ = Endpoint(endpointString: address) + try _ = Endpoint(endpointString: address, needsPort: false) } catch { throw InterfaceValidationError.invalidDNSServer(cause: error) }