]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Model: Ensure that a TunnelConfiguration always has a valid array of peers
authorRoopesh Chander <roop@roopc.net>
Sat, 10 Nov 2018 11:32:30 +0000 (17:02 +0530)
committerRoopesh Chander <roop@roopc.net>
Sat, 10 Nov 2018 11:32:30 +0000 (17:02 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/Shared/Model/Configuration.swift
WireGuard/WireGuard/ConfigFile/WgQuickConfigFileParser.swift
WireGuard/WireGuard/UI/TunnelViewModel.swift

index cbe42712448bc6865994995f4b68ab6d957d6220..3e661e61ab4ef599d12f12267d3151dd2ca52a66 100644 (file)
@@ -6,9 +6,16 @@ import Foundation
 @available(OSX 10.14, iOS 12.0, *)
 class TunnelConfiguration: Codable {
     var interface: InterfaceConfiguration
-    var peers: [PeerConfiguration] = []
-    init(interface: InterfaceConfiguration) {
+    let peers: [PeerConfiguration]
+    init(interface: InterfaceConfiguration, peers: [PeerConfiguration]) {
         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")
+        }
     }
 }
 
index 863cd1151b601c52c19e061e48af835678067c5f..0ded15eebe9afcf19620998016f8a1a820180ea0 100644 (file)
@@ -157,8 +157,7 @@ class WgQuickConfigFileParser {
         }
 
         if let interfaceConfiguration = interfaceConfiguration {
-            let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration)
-            tunnelConfiguration.peers = peerConfigurations
+            let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration, peers: peerConfigurations)
             return tunnelConfiguration
         } else {
             throw ParseError.noInterface
index 16da1c221167513d9724c0a4b905ba6c1d991bb3..94e3e6d1fe267883b99c4f6ba2cf5ec322b851e0 100644 (file)
@@ -441,8 +441,7 @@ class TunnelViewModel {
                 return .error("Two or more peers cannot have the same public key")
             }
 
-            let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration)
-            tunnelConfiguration.peers = peerConfigurations
+            let tunnelConfiguration = TunnelConfiguration(interface: interfaceConfiguration, peers: peerConfigurations)
             return .saved(tunnelConfiguration)
         }
     }