2018-08-15 22:34:16 +00:00
|
|
|
//
|
|
|
|
// Interface+Extension.swift
|
|
|
|
// WireGuard
|
|
|
|
//
|
|
|
|
// Created by Eric Kuck on 8/15/18.
|
|
|
|
// Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
extension Interface {
|
|
|
|
|
|
|
|
func validate() throws {
|
|
|
|
guard let privateKey = privateKey, !privateKey.isEmpty else {
|
|
|
|
throw InterfaceValidationError.emptyPrivateKey
|
|
|
|
}
|
|
|
|
|
|
|
|
guard privateKey.isBase64() else {
|
|
|
|
throw InterfaceValidationError.invalidPrivateKey
|
|
|
|
}
|
|
|
|
|
2018-08-16 20:03:40 +00:00
|
|
|
try addresses?.commaSeparatedToArray().forEach { address in
|
2018-08-15 22:34:16 +00:00
|
|
|
do {
|
|
|
|
try _ = CIDRAddress(stringRepresentation: address)
|
|
|
|
} catch {
|
|
|
|
throw InterfaceValidationError.invalidAddress(cause: error)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-08-16 20:03:40 +00:00
|
|
|
try dns?.commaSeparatedToArray().forEach { address in
|
2018-08-15 22:34:16 +00:00
|
|
|
do {
|
|
|
|
try _ = Endpoint(endpointString: address)
|
|
|
|
} catch {
|
|
|
|
throw InterfaceValidationError.invalidDNSServer(cause: error)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
enum InterfaceValidationError: Error {
|
|
|
|
case emptyPrivateKey
|
|
|
|
case invalidPrivateKey
|
|
|
|
case invalidAddress(cause: Error)
|
|
|
|
case invalidDNSServer(cause: Error)
|
|
|
|
}
|