Model: Ensure that a TunnelConfiguration always has a valid array of peers

Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
Roopesh Chander
2018-11-10 17:02:30 +05:30
parent e8d68396ca
commit 290f83d5ef
3 changed files with 11 additions and 6 deletions
+9 -2
View File
@@ -6,9 +6,16 @@ import Foundation
@available(OSX 10.14, iOS 12.0, *) @available(OSX 10.14, iOS 12.0, *)
class TunnelConfiguration: Codable { class TunnelConfiguration: Codable {
var interface: InterfaceConfiguration var interface: InterfaceConfiguration
var peers: [PeerConfiguration] = [] let peers: [PeerConfiguration]
init(interface: InterfaceConfiguration) { init(interface: InterfaceConfiguration, peers: [PeerConfiguration]) {
self.interface = interface self.interface = interface
self.peers = peers
let peerPublicKeysArray = peers.map { $0.publicKey }
let peerPublicKeysSet = Set<Data>(peerPublicKeysArray)
if (peerPublicKeysArray.count != peerPublicKeysSet.count) {
fatalError("Two or more peers cannot have the same public key")
}
} }
} }
@@ -157,8 +157,7 @@ class WgQuickConfigFileParser {
} }
if let interfaceConfiguration = interfaceConfiguration { if let interfaceConfiguration = interfaceConfiguration {
let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration) let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration, peers: peerConfigurations)
tunnelConfiguration.peers = peerConfigurations
return tunnelConfiguration return tunnelConfiguration
} else { } else {
throw ParseError.noInterface throw ParseError.noInterface
+1 -2
View File
@@ -441,8 +441,7 @@ class TunnelViewModel {
return .error("Two or more peers cannot have the same public key") return .error("Two or more peers cannot have the same public key")
} }
let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration) let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration, peers: peerConfigurations)
tunnelConfiguration.peers = peerConfigurations
return .saved(tunnelConfiguration) return .saved(tunnelConfiguration)
} }
} }