aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/UI
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-12-06 15:58:27 +0530
committerRoopesh Chander <roop@roopc.net>2018-12-07 12:36:19 +0530
commit8d26a3c5360a89605b2ecf6c5ad8edadd8eea590 (patch)
tree52f570268e04f8df77790dcfab40a560fa0d9df6 /WireGuard/WireGuard/UI
parentError presenter: Always handle the passed error (diff)
downloadwireguard-apple-8d26a3c5360a89605b2ecf6c5ad8edadd8eea590.tar.xz
wireguard-apple-8d26a3c5360a89605b2ecf6c5ad8edadd8eea590.zip
Error handling: Cleanup Tunnels Manager errors
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/UI')
-rw-r--r--WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift49
-rw-r--r--WireGuard/WireGuard/UI/iOS/MainViewController.swift10
-rw-r--r--WireGuard/WireGuard/UI/iOS/TunnelEditTableViewController.swift9
-rw-r--r--WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift8
4 files changed, 45 insertions, 31 deletions
diff --git a/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift b/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift
index 2ae0cf0..35bbdec 100644
--- a/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift
+++ b/WireGuard/WireGuard/UI/iOS/ErrorPresenter.swift
@@ -6,27 +6,12 @@ import os.log
class ErrorPresenter {
static func errorMessage(for error: Error) -> (String, String) {
- switch (error) {
- // TunnelManagementError
- case TunnelManagementError.tunnelAlreadyExistsWithThatName:
- return ("Name already exists", "A tunnel with that name already exists")
- case TunnelManagementError.tunnelInvalidName:
- return ("Name already exists", "The tunnel name is invalid")
- case TunnelManagementError.vpnSystemErrorOnAddTunnel:
- return ("Unable to create tunnel", "Internal error")
- case TunnelManagementError.vpnSystemErrorOnModifyTunnel:
- return ("Unable to modify tunnel", "Internal error")
- case TunnelManagementError.vpnSystemErrorOnRemoveTunnel:
- return ("Unable to remove tunnel", "Internal error")
+ if let tunnelsManagerError = error as? TunnelsManagerError {
+ return errorMessage(forTunnelsManagerError: tunnelsManagerError)
+ }
- // TunnelActivationError
- case TunnelActivationError.tunnelActivationAttemptFailed:
- return ("Activation failure", "The tunnel could not be activated due to an internal error")
- case TunnelActivationError.tunnelActivationFailedInternalError:
- return ("Activation failure", "The tunnel could not be activated due to an internal error")
- case TunnelActivationError.tunnelActivationFailedNoInternetConnection:
- return ("Activation failure", "No internet connection")
+ switch (error) {
// Importing a zip file
case ZipArchiveError.cantOpenInputZipFile:
@@ -47,6 +32,32 @@ class ErrorPresenter {
}
}
+ private static func errorMessage(forTunnelsManagerError error: TunnelsManagerError) -> (String, String) {
+ switch (error) {
+ // Tunnels list management
+ case TunnelsManagerError.tunnelNameEmpty:
+ return ("No name provided", "Can't create tunnel with an empty name")
+ case TunnelsManagerError.tunnelAlreadyExistsWithThatName:
+ return ("Name already exists", "A tunnel with that name already exists")
+ case TunnelsManagerError.vpnSystemErrorOnListingTunnels:
+ return ("Unable to list tunnels", "Internal error")
+ case TunnelsManagerError.vpnSystemErrorOnAddTunnel:
+ return ("Unable to create tunnel", "Internal error")
+ case TunnelsManagerError.vpnSystemErrorOnModifyTunnel:
+ return ("Unable to modify tunnel", "Internal error")
+ case TunnelsManagerError.vpnSystemErrorOnRemoveTunnel:
+ return ("Unable to remove tunnel", "Internal error")
+
+ // Tunnel activation
+ case TunnelsManagerError.tunnelActivationAttemptFailed:
+ return ("Activation failure", "The tunnel could not be activated due to an internal error")
+ case TunnelsManagerError.tunnelActivationFailedInternalError:
+ return ("Activation failure", "The tunnel could not be activated due to an internal error")
+ case TunnelsManagerError.tunnelActivationFailedNoInternetConnection:
+ return ("Activation failure", "No internet connection")
+ }
+ }
+
static func showErrorAlert(error: Error, from sourceVC: UIViewController?,
onDismissal: (() -> Void)? = nil, onPresented: (() -> Void)? = nil) {
guard let sourceVC = sourceVC else { return }
diff --git a/WireGuard/WireGuard/UI/iOS/MainViewController.swift b/WireGuard/WireGuard/UI/iOS/MainViewController.swift
index 18853d9..0d2d681 100644
--- a/WireGuard/WireGuard/UI/iOS/MainViewController.swift
+++ b/WireGuard/WireGuard/UI/iOS/MainViewController.swift
@@ -36,8 +36,12 @@ class MainViewController: UISplitViewController {
self.preferredDisplayMode = .allVisible
// Create the tunnels manager, and when it's ready, inform tunnelsListVC
- TunnelsManager.create { [weak self] tunnelsManager in
- guard let tunnelsManager = tunnelsManager else { return }
+ TunnelsManager.create { [weak self] result in
+ if let error = result.error {
+ ErrorPresenter.showErrorAlert(error: error, from: self)
+ return
+ }
+ let tunnelsManager: TunnelsManager = result.value!
guard let s = self else { return }
s.tunnelsManager = tunnelsManager
@@ -52,7 +56,7 @@ class MainViewController: UISplitViewController {
}
extension MainViewController: TunnelsManagerActivationDelegate {
- func tunnelActivationFailed(tunnel: TunnelContainer, error: TunnelActivationError) {
+ func tunnelActivationFailed(tunnel: TunnelContainer, error: TunnelsManagerError) {
ErrorPresenter.showErrorAlert(error: error, from: self)
}
}
diff --git a/WireGuard/WireGuard/UI/iOS/TunnelEditTableViewController.swift b/WireGuard/WireGuard/UI/iOS/TunnelEditTableViewController.swift
index 74c6e57..ca5e6a8 100644
--- a/WireGuard/WireGuard/UI/iOS/TunnelEditTableViewController.swift
+++ b/WireGuard/WireGuard/UI/iOS/TunnelEditTableViewController.swift
@@ -99,14 +99,13 @@ class TunnelEditTableViewController: UITableViewController {
} else {
// We're adding a new tunnel
tunnelsManager.add(tunnelConfiguration: tunnelConfiguration,
- activateOnDemandSetting: activateOnDemandSetting) { [weak self] (tunnel, error) in
- if let error = error {
+ activateOnDemandSetting: activateOnDemandSetting) { [weak self] result in
+ if let error = result.error {
ErrorPresenter.showErrorAlert(error: error, from: self)
} else {
+ let tunnel: TunnelContainer = result.value!
self?.dismiss(animated: true, completion: nil)
- if let tunnel = tunnel {
- self?.delegate?.tunnelSaved(tunnel: tunnel)
- }
+ self?.delegate?.tunnelSaved(tunnel: tunnel)
}
}
}
diff --git a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
index 3cc3fa1..ae39587 100644
--- a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
+++ b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
@@ -182,8 +182,8 @@ class TunnelsListTableViewController: UIViewController {
let fileBaseName = url.deletingPathExtension().lastPathComponent.trimmingCharacters(in: .whitespacesAndNewlines)
if let fileContents = try? String(contentsOf: url),
let tunnelConfiguration = try? WgQuickConfigFileParser.parse(fileContents, name: fileBaseName) {
- tunnelsManager.add(tunnelConfiguration: tunnelConfiguration) { (_, error) in
- if let error = error {
+ tunnelsManager.add(tunnelConfiguration: tunnelConfiguration) { [weak self] result in
+ if let error = result.error {
ErrorPresenter.showErrorAlert(error: error, from: self)
}
}
@@ -207,8 +207,8 @@ extension TunnelsListTableViewController: UIDocumentPickerDelegate {
extension TunnelsListTableViewController: QRScanViewControllerDelegate {
func addScannedQRCode(tunnelConfiguration: TunnelConfiguration, qrScanViewController: QRScanViewController,
completionHandler: (() -> Void)?) {
- tunnelsManager?.add(tunnelConfiguration: tunnelConfiguration) { (_, error) in
- if let error = error {
+ tunnelsManager?.add(tunnelConfiguration: tunnelConfiguration) { result in
+ if let error = result.error {
ErrorPresenter.showErrorAlert(error: error, from: qrScanViewController, onDismissal: completionHandler)
} else {
completionHandler?()