aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard
diff options
context:
space:
mode:
Diffstat (limited to 'WireGuard')
-rw-r--r--WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift31
-rw-r--r--WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift5
-rw-r--r--WireGuard/WireGuard/ZipArchive/ZipArchive.swift13
-rw-r--r--WireGuard/WireGuard/ZipArchive/ZipExporter.swift18
-rw-r--r--WireGuard/WireGuard/ZipArchive/ZipImporter.swift19
5 files changed, 45 insertions, 41 deletions
diff --git a/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift b/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift
index b085b97..3c4a1bf 100644
--- a/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift
+++ b/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift
@@ -5,37 +5,10 @@ import UIKit
import os.log
class ErrorPresenter {
- static func errorMessage(for error: Error) -> (String, String) {
-
- if let error = error as? WireGuardAppError {
- return error.alertText()
- }
-
- switch (error) {
-
- // Importing a zip file
- case ZipArchiveError.cantOpenInputZipFile:
- return ("Unable to read zip archive", "The zip archive could not be read.")
- case ZipArchiveError.badArchive:
- return ("Unable to read zip archive", "Bad or corrupt zip archive.")
- case ZipImporterError.noTunnelsInZipArchive:
- return ("No tunnels in zip archive", "No .conf tunnel files were found inside the zip archive.")
-
- // Exporting a zip file
- case ZipArchiveError.cantOpenOutputZipFileForWriting:
- return ("Unable to create zip archive", "Could not create a zip file in the app's document directory.")
- case ZipExporterError.noTunnelsToExport:
- return ("Nothing to export", "There are no tunnels to export")
-
- default:
- return ("Error", error.localizedDescription)
- }
- }
-
- static func showErrorAlert(error: Error, from sourceVC: UIViewController?,
+ static func showErrorAlert(error: WireGuardAppError, from sourceVC: UIViewController?,
onDismissal: (() -> Void)? = nil, onPresented: (() -> Void)? = nil) {
guard let sourceVC = sourceVC else { return }
- let (title, message) = ErrorPresenter.errorMessage(for: error)
+ let (title, message) = error.alertText()
let okAction = UIAlertAction(title: "OK", style: .default) { (_) in
onDismissal?()
}
diff --git a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
index ae39587..4450796 100644
--- a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
+++ b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
@@ -165,11 +165,12 @@ class TunnelsListTableViewController: UIViewController {
func importFromFile(url: URL) {
guard let tunnelsManager = tunnelsManager else { return }
if (url.pathExtension == "zip") {
- ZipImporter.importConfigFiles(from: url) { (configs, error) in
- if let error = error {
+ ZipImporter.importConfigFiles(from: url) { [weak self] result in
+ if let error = result.error {
ErrorPresenter.showErrorAlert(error: error, from: self)
return
}
+ let configs: [TunnelConfiguration?] = result.value!
tunnelsManager.addMultiple(tunnelConfigurations: configs.compactMap { $0 }) { [weak self] (numberSuccessful) in
if numberSuccessful == configs.count {
return
diff --git a/WireGuard/WireGuard/ZipArchive/ZipArchive.swift b/WireGuard/WireGuard/ZipArchive/ZipArchive.swift
index d907803..2faa516 100644
--- a/WireGuard/WireGuard/ZipArchive/ZipArchive.swift
+++ b/WireGuard/WireGuard/ZipArchive/ZipArchive.swift
@@ -3,10 +3,21 @@
import Foundation
-enum ZipArchiveError: Error {
+enum ZipArchiveError: WireGuardAppError {
case cantOpenInputZipFile
case cantOpenOutputZipFileForWriting
case badArchive
+
+ func alertText() -> (String, String) {
+ switch (self) {
+ case .cantOpenInputZipFile:
+ return ("Unable to read zip archive", "The zip archive could not be read.")
+ case .cantOpenOutputZipFileForWriting:
+ return ("Unable to create zip archive", "Could not open zip file for writing.")
+ case .badArchive:
+ return ("Unable to read zip archive", "Bad or corrupt zip archive.")
+ }
+ }
}
class ZipArchive {
diff --git a/WireGuard/WireGuard/ZipArchive/ZipExporter.swift b/WireGuard/WireGuard/ZipArchive/ZipExporter.swift
index bd6c3dd..a4e9d7a 100644
--- a/WireGuard/WireGuard/ZipArchive/ZipExporter.swift
+++ b/WireGuard/WireGuard/ZipArchive/ZipExporter.swift
@@ -3,12 +3,20 @@
import UIKit
-enum ZipExporterError: Error {
+enum ZipExporterError: WireGuardAppError {
case noTunnelsToExport
+
+ func alertText() -> (String, String) {
+ switch (self) {
+ case .noTunnelsToExport:
+ return ("Nothing to export", "There are no tunnels to export")
+ }
+ }
}
class ZipExporter {
- static func exportConfigFiles(tunnelConfigurations: [TunnelConfiguration], to url: URL, completion: @escaping (Error?) -> Void) {
+ static func exportConfigFiles(tunnelConfigurations: [TunnelConfiguration], to url: URL,
+ completion: @escaping (WireGuardAppError?) -> Void) {
guard (!tunnelConfigurations.isEmpty) else {
completion(ZipExporterError.noTunnelsToExport)
@@ -27,9 +35,11 @@ class ZipExporter {
}
do {
try ZipArchive.archive(inputs: inputsToArchiver, to: url)
- } catch (let e) {
- DispatchQueue.main.async { completion(e) }
+ } catch (let error as WireGuardAppError) {
+ DispatchQueue.main.async { completion(error) }
return
+ } catch {
+ fatalError()
}
DispatchQueue.main.async { completion(nil) }
}
diff --git a/WireGuard/WireGuard/ZipArchive/ZipImporter.swift b/WireGuard/WireGuard/ZipArchive/ZipImporter.swift
index 4c439d4..507a823 100644
--- a/WireGuard/WireGuard/ZipArchive/ZipImporter.swift
+++ b/WireGuard/WireGuard/ZipArchive/ZipImporter.swift
@@ -3,12 +3,19 @@
import UIKit
-enum ZipImporterError: Error {
+enum ZipImporterError: WireGuardAppError {
case noTunnelsInZipArchive
+
+ func alertText() -> (String, String) {
+ switch (self) {
+ case .noTunnelsInZipArchive:
+ return ("No tunnels in zip archive", "No .conf tunnel files were found inside the zip archive.")
+ }
+ }
}
class ZipImporter {
- static func importConfigFiles(from url: URL, completion: @escaping ([TunnelConfiguration?], Error?) -> Void) {
+ static func importConfigFiles(from url: URL, completion: @escaping (WireGuardResult<[TunnelConfiguration?]>) -> Void) {
DispatchQueue.global(qos: .userInitiated).async {
var unarchivedFiles: [(fileName: String, contents: Data)]
do {
@@ -26,9 +33,11 @@ class ZipImporter {
if (unarchivedFiles.isEmpty) {
throw ZipImporterError.noTunnelsInZipArchive
}
- } catch (let error) {
- DispatchQueue.main.async { completion([], error) }
+ } catch (let error as WireGuardAppError) {
+ DispatchQueue.main.async { completion(.failure(error)) }
return
+ } catch {
+ fatalError()
}
unarchivedFiles.sort { $0.fileName < $1.fileName }
@@ -45,7 +54,7 @@ class ZipImporter {
}
configs[i] = tunnelConfig
}
- DispatchQueue.main.async { completion(configs, nil) }
+ DispatchQueue.main.async { completion(.success(configs)) }
}
}
}