diff options
author | Jeroen Leenarts <jeroen.leenarts@gmail.com> | 2018-09-03 00:08:34 +0200 |
---|---|---|
committer | Jeroen Leenarts <jeroen.leenarts@gmail.com> | 2018-09-03 00:08:34 +0200 |
commit | 56c543f1fc9f120a94ad73f51adc3893c7a1d218 (patch) | |
tree | 979421e42812af6b6200066683c1acd2c00da540 /WireGuard | |
parent | Lazy WGContext made connection unstable. (diff) | |
download | wireguard-apple-56c543f1fc9f120a94ad73f51adc3893c7a1d218.tar.xz wireguard-apple-56c543f1fc9f120a94ad73f51adc3893c7a1d218.zip |
Import of zip.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'WireGuard')
-rw-r--r-- | WireGuard/AppDelegate.swift | 26 | ||||
-rw-r--r-- | WireGuard/Coordinators/AppCoordinator.swift | 23 | ||||
-rw-r--r-- | WireGuard/Info.plist | 35 |
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> |