aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeroen Leenarts <jeroen.leenarts@gmail.com>2018-09-03 00:08:34 +0200
committerJeroen Leenarts <jeroen.leenarts@gmail.com>2018-09-03 00:08:34 +0200
commit56c543f1fc9f120a94ad73f51adc3893c7a1d218 (patch)
tree979421e42812af6b6200066683c1acd2c00da540
parentLazy WGContext made connection unstable. (diff)
downloadwireguard-apple-56c543f1fc9f120a94ad73f51adc3893c7a1d218.tar.xz
wireguard-apple-56c543f1fc9f120a94ad73f51adc3893c7a1d218.zip
Import of zip.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--WireGuard/AppDelegate.swift26
-rw-r--r--WireGuard/Coordinators/AppCoordinator.swift23
-rw-r--r--WireGuard/Info.plist35
3 files changed, 65 insertions, 19 deletions
diff --git a/WireGuard/AppDelegate.swift b/WireGuard/AppDelegate.swift
index 2460a9f..bf9573e 100644
--- a/WireGuard/AppDelegate.swift
+++ b/WireGuard/AppDelegate.swift
@@ -32,14 +32,24 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
os_log("Failed to remove item from Inbox: %{public}@", log: Log.general, type: .error, url.absoluteString)
}
}
- guard url.pathExtension == "conf" else { return false }
-
- do {
- try appCoordinator.importConfig(config: url)
- } catch {
- os_log("Unable to import config: %{public}@", log: Log.general, type: .error, url.absoluteString)
- return false
+ if url.pathExtension == "conf" {
+ do {
+ try appCoordinator.importConfig(config: url)
+ } catch {
+ os_log("Unable to import config: %{public}@", log: Log.general, type: .error, url.absoluteString)
+ return false
+ }
+ return true
+ } else if url.pathExtension == "zip" {
+ do {
+ try appCoordinator.importConfigs(configZip: url)
+ } catch {
+ os_log("Unable to import config: %{public}@", log: Log.general, type: .error, url.absoluteString)
+ return false
+ }
+ return true
}
- return true
+ return false
+
}
}
diff --git a/WireGuard/Coordinators/AppCoordinator.swift b/WireGuard/Coordinators/AppCoordinator.swift
index 31de8f1..7ed9025 100644
--- a/WireGuard/Coordinators/AppCoordinator.swift
+++ b/WireGuard/Coordinators/AppCoordinator.swift
@@ -99,17 +99,36 @@ class AppCoordinator: RootViewCoordinator {
func importConfig(config: URL) throws {
do {
- let configString = try String(contentsOf: config)
+ try importConfig(configString: try String(contentsOf: config), title: config.deletingPathExtension().lastPathComponent)
+ } catch {
+ throw AppCoordinatorError.configImportError(msg: "Failed")
+ }
+ }
+
+ func importConfig(configString: String, title: String) throws {
+ do {
let addContext = persistentContainer.newBackgroundContext()
let tunnel = try Tunnel.fromConfig(configString, context: addContext)
- let title = config.deletingPathExtension().lastPathComponent
tunnel.title = title
addContext.saveContext()
self.saveTunnel(tunnel)
} catch {
throw AppCoordinatorError.configImportError(msg: "Failed")
}
+ }
+ func importConfigs(configZip: URL) throws {
+ if let archive = Archive(url: configZip, accessMode: .read) {
+ for entry in archive {
+ var entryData = Data(capacity: 0)
+ _ = try archive.extract(entry) { (data) in
+ entryData.append(data)
+ }
+ if let config = String(data: entryData, encoding: .utf8) {
+ try importConfig(configString: config, title: entry.path)
+ }
+ }
+ }
}
// swiftlint:disable next function_body_length
diff --git a/WireGuard/Info.plist b/WireGuard/Info.plist
index f3d505d..0603681 100644
--- a/WireGuard/Info.plist
+++ b/WireGuard/Info.plist
@@ -79,11 +79,6 @@
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
- <key>UTTypeTagSpecification</key>
- <dict>
- <key>public.filename-extension</key>
- <string>conf</string>
- </dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
@@ -97,29 +92,51 @@
</array>
<key>UTTypeIdentifier</key>
<string>com.wireguard.config.quick</string>
+ <key>UTTypeTagSpecification</key>
+ <dict>
+ <key>public.filename-extension</key>
+ <string>conf</string>
+ </dict>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
+ <key>UTTypeConformsTo</key>
+ <array>
+ <string>com.pkware.zip-archive</string>
+ </array>
+ <key>UTTypeDescription</key>
+ <string>WireGuard configuration</string>
+ <key>UTTypeIconFiles</key>
+ <array>
+ <string>icon_20pt@3x</string>
+ <string>icon_60pt@3x</string>
+ </array>
+ <key>UTTypeIdentifier</key>
+ <string>com.wireguard.config.quick</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>conf</string>
</dict>
+ </dict>
+ <dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
- <string>WireGuard configuration</string>
+ <string>WireGuard configurations</string>
<key>UTTypeIconFiles</key>
<array>
- <string>icon_20pt@3x</string>
- <string>icon_60pt@3x</string>
+ <string>icon_20pt.png</string>
+ <string>icon_60pt@3x.png</string>
</array>
<key>UTTypeIdentifier</key>
- <string>com.wireguard.config.quick</string>
+ <string>com.wireguard.config.quick.confs</string>
+ <key>public.filename-extension</key>
+ <string>zip</string>
</dict>
</array>
</dict>