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:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user