]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Manage tunnels: Add empty tunnel pulldown menu implementation
authorRoopesh Chander <roop@roopc.net>
Tue, 8 Jan 2019 19:47:46 +0000 (01:17 +0530)
committerRoopesh Chander <roop@roopc.net>
Mon, 14 Jan 2019 09:22:35 +0000 (14:52 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/macOS/ViewController/TunnelEditViewController.swift
WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift

index 62eba17a4f4e549d20199b724d25c001c56f1584..ae95fba208cd318d40e0687e455e5bfd4bc83a3f 100644 (file)
@@ -81,8 +81,10 @@ class TunnelEditViewController: NSViewController {
         fatalError("init(coder:) has not been implemented")
     }
 
-    override func loadView() {
-        if let tunnel = tunnel, let tunnelConfiguration = tunnel.tunnelConfiguration {
+    func populateTextFields() {
+        if let tunnel = tunnel {
+            // Editing an existing tunnel
+            let tunnelConfiguration = tunnel.tunnelConfiguration!
             nameRow.value = tunnel.name
             textView.string = tunnelConfiguration.asWgQuickConfig()
             publicKeyRow.value = tunnelConfiguration.interface.publicKey.base64EncodedString()
@@ -97,7 +99,21 @@ class TunnelEditViewController: NSViewController {
                     publicKeyRow?.value = ""
                 }
             }
+        } else {
+            // Creating a new tunnel
+            let privateKey = Curve25519.generatePrivateKey()
+            let publicKey = Curve25519.generatePublicKey(fromPrivateKey: privateKey)
+            let bootstrappingText = """
+            [Interface]
+            PrivateKey = \(privateKey.base64EncodedString())
+            """
+            publicKeyRow.value = publicKey.base64EncodedString()
+            textView.string = bootstrappingText
         }
+    }
+
+    override func loadView() {
+        populateTextFields()
 
         scrollView.documentView = textView
 
@@ -163,6 +179,29 @@ class TunnelEditViewController: NSViewController {
             } catch {
                 fatalError()
             }
+        } else {
+            // We're creating a new tunnel
+            if tunnelsManager.tunnel(named: name) != nil {
+                ErrorPresenter.showErrorAlert(title: tr(format: "macAlertDuplicateName (%@)", name), message: "", from: self)
+                return
+            }
+            do {
+                let tunnelConfiguration = try TunnelConfiguration(fromWgQuickConfig: textView.string, called: nameRow.value)
+                let onDemandSetting = ActivateOnDemandSetting.defaultSetting
+                tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: onDemandSetting) { [weak self] result in
+                    if let error = result.error {
+                        ErrorPresenter.showErrorAlert(error: error, from: self)
+                    } else {
+                        let tunnel: TunnelContainer = result.value!
+                        self?.dismiss(self)
+                        self?.delegate?.tunnelSaved(tunnel: tunnel)
+                    }
+                }
+            } catch let error as WireGuardAppError {
+                ErrorPresenter.showErrorAlert(error: error, from: self)
+            } catch {
+                fatalError()
+            }
         }
     }
 
index 723814edb291702eefa1272a35d7a377a3e17097..162cf1548a85df308435c7570a4a35ff04cca29d 100644 (file)
@@ -127,7 +127,8 @@ class TunnelsListTableViewController: NSViewController {
     }
 
     @objc func addEmptyTunnelClicked() {
-        print("addEmptyTunnelClicked")
+        let tunnelEditVC = TunnelEditViewController(tunnelsManager: tunnelsManager, tunnel: nil)
+        presentAsSheet(tunnelEditVC)
     }
 
     @objc func importTunnelClicked() {