aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--WireGuard/Shared/Model/Configuration.swift11
-rw-r--r--WireGuard/WireGuard/ConfigFile/WgQuickConfigFileParser.swift3
-rw-r--r--WireGuard/WireGuard/UI/TunnelViewModel.swift3
3 files changed, 11 insertions, 6 deletions
diff --git a/WireGuard/Shared/Model/Configuration.swift b/WireGuard/Shared/Model/Configuration.swift
index cbe4271..3e661e6 100644
--- a/WireGuard/Shared/Model/Configuration.swift
+++ b/WireGuard/Shared/Model/Configuration.swift
@@ -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")
+ }
}
}
diff --git a/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileParser.swift b/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileParser.swift
index 863cd11..0ded15e 100644
--- a/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileParser.swift
+++ b/WireGuard/WireGuard/ConfigFile/WgQuickConfigFileParser.swift
@@ -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
diff --git a/WireGuard/WireGuard/UI/TunnelViewModel.swift b/WireGuard/WireGuard/UI/TunnelViewModel.swift
index 16da1c2..94e3e6d 100644
--- a/WireGuard/WireGuard/UI/TunnelViewModel.swift
+++ b/WireGuard/WireGuard/UI/TunnelViewModel.swift
@@ -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)
}
}