aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2019-01-08 19:28:38 +0530
committerRoopesh Chander <roop@roopc.net>2019-01-14 14:52:34 +0530
commitfc03c635c1e85b306c456cd9517201d05bf3d187 (patch)
treefd31c6b0b1d38db14565e86be6d484d15ce96021 /WireGuard
parentmacOS: Edit view: Validate and save (diff)
downloadwireguard-apple-fc03c635c1e85b306c456cd9517201d05bf3d187.tar.xz
wireguard-apple-fc03c635c1e85b306c456cd9517201d05bf3d187.zip
Parsing: Error on duplicate entries
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard')
-rw-r--r--WireGuard/Shared/Model/TunnelConfiguration+WgQuickConfig.swift9
-rw-r--r--WireGuard/WireGuard/Base.lproj/Localizable.strings2
-rw-r--r--WireGuard/WireGuard/UI/macOS/ParseError+WireGuardAppError.swift2
3 files changed, 11 insertions, 2 deletions
diff --git a/WireGuard/Shared/Model/TunnelConfiguration+WgQuickConfig.swift b/WireGuard/Shared/Model/TunnelConfiguration+WgQuickConfig.swift
index e438e29..48c88b0 100644
--- a/WireGuard/Shared/Model/TunnelConfiguration+WgQuickConfig.swift
+++ b/WireGuard/Shared/Model/TunnelConfiguration+WgQuickConfig.swift
@@ -30,6 +30,7 @@ extension TunnelConfiguration {
case peerHasInvalidPersistentKeepAlive(String)
case peerHasUnrecognizedKey(String)
case multiplePeersWithSamePublicKey
+ case multipleEntriesForKey(String)
}
//swiftlint:disable:next function_body_length cyclomatic_complexity
@@ -61,8 +62,12 @@ extension TunnelConfiguration {
let key = keyWithCase.lowercased()
let value = line[line.index(equalsIndex, offsetBy: 1)...].trimmingCharacters(in: .whitespaces)
let keysWithMultipleEntriesAllowed: Set<String> = ["address", "allowedips", "dns"]
- if let presentValue = attributes[key], keysWithMultipleEntriesAllowed.contains(key) {
- attributes[key] = presentValue + "," + value
+ if let presentValue = attributes[key] {
+ if keysWithMultipleEntriesAllowed.contains(key) {
+ attributes[key] = presentValue + "," + value
+ } else {
+ throw ParseError.multipleEntriesForKey(keyWithCase)
+ }
} else {
attributes[key] = value
}
diff --git a/WireGuard/WireGuard/Base.lproj/Localizable.strings b/WireGuard/WireGuard/Base.lproj/Localizable.strings
index e2a7295..3cfe1fc 100644
--- a/WireGuard/WireGuard/Base.lproj/Localizable.strings
+++ b/WireGuard/WireGuard/Base.lproj/Localizable.strings
@@ -281,3 +281,5 @@
"macAlertUnrecognizedPeerKey (%@)" = "Peer contains unrecognized key '%@'";
"macAlertInfoUnrecognizedPeerKey" = "Valid keys are: 'PublicKey', 'PresharedKey', 'AllowedIPs', 'Endpoint' and 'PersistentKeepalive'";
+
+"macAlertMultipleEntriesForKey (%@)" = "There should be only one entry per section for key '%@'";
diff --git a/WireGuard/WireGuard/UI/macOS/ParseError+WireGuardAppError.swift b/WireGuard/WireGuard/UI/macOS/ParseError+WireGuardAppError.swift
index 4a1c890..a85df22 100644
--- a/WireGuard/WireGuard/UI/macOS/ParseError+WireGuardAppError.swift
+++ b/WireGuard/WireGuard/UI/macOS/ParseError+WireGuardAppError.swift
@@ -45,6 +45,8 @@ extension TunnelConfiguration.ParseError: WireGuardAppError {
return (tr(format: "macAlertUnrecognizedPeerKey (%@)", value), tr("macAlertInfoUnrecognizedPeerKey"))
case .multiplePeersWithSamePublicKey:
return (tr("alertInvalidPeerMessagePublicKeyDuplicated"), "")
+ case .multipleEntriesForKey(let value):
+ return (tr(format: "macAlertMultipleEntriesForKey (%@)", value), "")
}
}
}