]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Tunnel creation: Saving a configuration
authorRoopesh Chander <roop@roopc.net>
Tue, 23 Oct 2018 11:53:46 +0000 (17:23 +0530)
committerRoopesh Chander <roop@roopc.net>
Sat, 27 Oct 2018 09:43:01 +0000 (15:13 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/iOS/TunnelEditTableViewController.swift
WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift

index 9a239c5fd8f0395acb21a8eef135fe793d1d40e9..a98ae81ed8cc418a7685837fecbbf5705c4db5df 100644 (file)
@@ -25,9 +25,11 @@ class TunnelEditTableViewController: UITableViewController {
          .deletePeer]
     ]
 
+    let tunnelsManager: TunnelsManager
     let tunnelViewModel: TunnelViewModel
 
-    init() {
+    init(tunnelsManager tm: TunnelsManager) {
+        tunnelsManager = tm
         tunnelViewModel = TunnelViewModel(tunnelConfiguration: nil)
         super.init(style: .grouped)
         self.modalPresentationStyle = .formSheet
@@ -52,12 +54,35 @@ class TunnelEditTableViewController: UITableViewController {
     }
 
     @objc func saveTapped() {
-        print("Save")
+        self.tableView.endEditing(false)
+        let tunnelSaveResult = tunnelViewModel.save()
+        switch (tunnelSaveResult) {
+        case .error(let errorMessage):
+            let erroringConfiguration = (tunnelViewModel.interfaceData.validatedConfiguration == nil) ? "Interface" : "Peer"
+            showErrorAlert(title: "Invalid \(erroringConfiguration)", message: errorMessage)
+        case .saved(let tunnelConfiguration):
+            tunnelsManager.add(tunnelConfiguration: tunnelConfiguration) { [weak self] (error) in
+                if let error = error {
+                    print("Could not save: \(error)")
+                    self?.showErrorAlert(title: "Could not save", message: "Internal error")
+                } else {
+                    self?.dismiss(animated: true, completion: nil)
+                }
+            }
+        }
     }
 
     @objc func cancelTapped() {
         dismiss(animated: true, completion: nil)
     }
+
+    func showErrorAlert(title: String, message: String) {
+        let okAction = UIAlertAction(title: "Ok", style: .default)
+        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
+        alert.addAction(okAction)
+
+        self.present(alert, animated: true, completion: nil)
+    }
 }
 
 // MARK: UITableViewDataSource
index d58da27a29c34dc565912152ea10178afcfd51df..f13a9000e3253dd491e41349f797372bf737e452 100644 (file)
@@ -40,11 +40,11 @@ class TunnelsListTableViewController: UITableViewController {
                                       message: "Add a tunnel",
                                       preferredStyle: .actionSheet)
         alert.addAction(
-            UIAlertAction(title: "Create from scratch", style: .default) { (action) in
-                let editVC = TunnelEditTableViewController()
-                let editNC = UINavigationController(rootViewController: editVC)
-                self.present(editNC, animated: true) {
-                    print("Done")
+            UIAlertAction(title: "Create from scratch", style: .default) { [weak self] (action) in
+                if let s = self, let tunnelsManager = s.tunnelsManager {
+                    let editVC = TunnelEditTableViewController(tunnelsManager: tunnelsManager)
+                    let editNC = UINavigationController(rootViewController: editVC)
+                    s.present(editNC, animated: true)
                 }
             }
         )