aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard
diff options
context:
space:
mode:
authorJeroen Leenarts <jeroen.leenarts@gmail.com>2018-05-27 22:38:44 +0200
committerJeroen Leenarts <jeroen.leenarts@gmail.com>2018-05-27 22:38:44 +0200
commit1407090f94b6be4661fd82266a6f4fbe320323ce (patch)
treead1e814b31a8d7b506f5833967c7cbcbe7196ae4 /WireGuard
parentA config having zero peers is allowed. (diff)
downloadwireguard-apple-1407090f94b6be4661fd82266a6f4fbe320323ce.tar.xz
wireguard-apple-1407090f94b6be4661fd82266a6f4fbe320323ce.zip
Wire up TunnelConfigurationTableViewController.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'WireGuard')
-rw-r--r--WireGuard/Base.lproj/Main.storyboard50
-rw-r--r--WireGuard/Coordinators/AppCoordinator.swift6
-rw-r--r--WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift98
3 files changed, 147 insertions, 7 deletions
diff --git a/WireGuard/Base.lproj/Main.storyboard b/WireGuard/Base.lproj/Main.storyboard
index be9ffce..9c0b04f 100644
--- a/WireGuard/Base.lproj/Main.storyboard
+++ b/WireGuard/Base.lproj/Main.storyboard
@@ -117,6 +117,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="06N-KU-LSv" id="TuA-ac-TIy"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -137,10 +140,13 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="06N-KU-LSv" id="7YF-mU-HZT"/>
+ </connections>
</textField>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="C1M-bh-5mf">
<rect key="frame" x="240" y="0.0" width="103" height="30"/>
- <state key="normal" title="Button"/>
+ <state key="normal" title="Generate"/>
</button>
</subviews>
</stackView>
@@ -160,6 +166,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="06N-KU-LSv" id="apT-gO-mcr"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -180,6 +189,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="06N-KU-LSv" id="CUZ-nd-ETQ"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -197,6 +209,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="06N-KU-LSv" id="YZ0-LC-PjW"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -219,6 +234,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="06N-KU-LSv" id="YjV-8W-z5Q"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -236,6 +254,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="06N-KU-LSv" id="F1E-lK-AsD"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -267,6 +288,9 @@
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fVu-Aa-9dn">
<rect key="frame" x="0.0" y="0.0" width="375" height="59.5"/>
<state key="normal" title="Add peer"/>
+ <connections>
+ <action selector="addPeer:" destination="RyR-s5-lBV" eventType="touchUpInside" id="Aug-zc-lQ6"/>
+ </connections>
</button>
</subviews>
<constraints>
@@ -322,6 +346,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="gzz-88-0IG" id="bkQ-Nc-VH4"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -339,6 +366,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="gzz-88-0IG" id="oAu-VZ-2dn"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -356,6 +386,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="gzz-88-0IG" id="DXo-0s-9sc"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -376,6 +409,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="gzz-88-0IG" id="PLB-sa-SBV"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -393,6 +429,9 @@
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
+ <connections>
+ <outlet property="delegate" destination="gzz-88-0IG" id="sbH-Sb-rcW"/>
+ </connections>
</textField>
</subviews>
</stackView>
@@ -419,9 +458,16 @@
</connections>
</tableView>
<navigationItem key="navigationItem" title="Tunnel settings" id="PPu-rX-T38">
- <barButtonItem key="rightBarButtonItem" systemItem="save" id="mft-1l-bWa"/>
+ <barButtonItem key="rightBarButtonItem" systemItem="save" id="mft-1l-bWa">
+ <connections>
+ <action selector="saveTunnelConfiguration:" destination="0VM-73-EPX" id="Hni-0w-hFF"/>
+ </connections>
+ </barButtonItem>
</navigationItem>
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
+ <connections>
+ <outlet property="saveButton" destination="mft-1l-bWa" id="Uif-KZ-isx"/>
+ </connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="j96-PK-ghN" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
diff --git a/WireGuard/Coordinators/AppCoordinator.swift b/WireGuard/Coordinators/AppCoordinator.swift
index 1bc9ee6..f6209a1 100644
--- a/WireGuard/Coordinators/AppCoordinator.swift
+++ b/WireGuard/Coordinators/AppCoordinator.swift
@@ -112,8 +112,7 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
func showTunnelConfigurationViewController(tunnel: Tunnel?, context: NSManagedObjectContext) {
let tunnelConfigurationViewController = storyboard.instantiateViewController(type: TunnelConfigurationTableViewController.self)
- tunnelConfigurationViewController.viewContext = context
- tunnelConfigurationViewController.delegate = self
+ tunnelConfigurationViewController.configure(context: context, delegate: self, tunnel: tunnel)
self.navigationController.pushViewController(tunnelConfigurationViewController, animated: true)
}
@@ -125,5 +124,8 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
}
extension AppCoordinator: TunnelConfigurationTableViewControllerDelegate {
+ func didSave(tunnel: Tunnel, tunnelConfigurationTableViewController: TunnelConfigurationTableViewController) {
+ navigationController.popToRootViewController(animated: true)
+ }
}
diff --git a/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift b/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift
index 271b7ae..64ad85d 100644
--- a/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift
+++ b/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift
@@ -9,13 +9,41 @@
import UIKit
import CoreData
import BNRCoreDataStack
+import PromiseKit
protocol TunnelConfigurationTableViewControllerDelegate: class {
+ func didSave(tunnel: Tunnel, tunnelConfigurationTableViewController: TunnelConfigurationTableViewController)
}
class TunnelConfigurationTableViewController: UITableViewController {
- var viewContext: NSManagedObjectContext!
- weak var delegate: TunnelConfigurationTableViewControllerDelegate?
+
+ @IBOutlet weak var saveButton: UIBarButtonItem!
+
+ private var viewContext: NSManagedObjectContext!
+ private weak var delegate: TunnelConfigurationTableViewControllerDelegate?
+ private var tunnel: Tunnel!
+
+ func configure(context: NSManagedObjectContext, delegate: TunnelConfigurationTableViewControllerDelegate? = nil, tunnel: Tunnel? = nil) {
+ viewContext = context
+ self.delegate = delegate
+ self.tunnel = tunnel ?? generateNewTunnelConfig()
+
+ }
+
+ private func generateNewTunnelConfig() -> Tunnel {
+ var tunnel: Tunnel! = nil
+
+ viewContext.performAndWait {
+ tunnel = Tunnel(context: viewContext)
+ tunnel.addToPeers(Peer(context: viewContext))
+
+ let interface = Interface(context: viewContext)
+ interface.addToAdresses(Address(context: viewContext))
+
+ tunnel.interface = interface
+ }
+ return tunnel
+ }
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
@@ -24,7 +52,7 @@ class TunnelConfigurationTableViewController: UITableViewController {
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 1:
- return 2
+ return tunnel?.peers?.count ?? 1
default:
return 1
}
@@ -40,17 +68,81 @@ class TunnelConfigurationTableViewController: UITableViewController {
return tableView.dequeueReusableCell(type: AddPeerTableViewCell.self, for: indexPath)
}
}
+
+ @IBAction func saveTunnelConfiguration(_ sender: Any) {
+ Promise<Void>(resolver: { (seal) in
+ viewContext.perform({
+ self.viewContext.saveContext({ (result) in
+ switch result {
+ case .success:
+ seal.fulfill(())
+ case .failure(let error):
+ seal.reject(error)
+ }
+ })
+ })
+ }).then { () -> Promise<Void> in
+ self.delegate?.didSave(tunnel: self.tunnel, tunnelConfigurationTableViewController: self)
+ return Promise.value(())
+ }.catch { error in
+ print("Error saving: \(error)")
+ }
+ }
}
class InterfaceTableViewCell: UITableViewCell {
+ var model: Interface!
+
+ @IBOutlet weak var nameField: UITextField!
+ @IBOutlet weak var privateKeyField: UITextField!
+ @IBOutlet weak var publicKeyField: UITextField!
+ @IBOutlet weak var addressesField: UITextField!
+ @IBOutlet weak var listenPortField: UITextField!
+ @IBOutlet weak var dnsField: UITextField!
+ @IBOutlet weak var mtuField: UITextField!
}
+extension InterfaceTableViewCell: UITextFieldDelegate {
+ func textFieldDidBeginEditing(_ textField: UITextField) {
+ print("\(textField) \(textField.text)")
+ }
+
+ func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
+ print("\(string)")
+ return true
+ }
+}
+
class PeerTableViewCell: UITableViewCell {
+ var peer: Peer!
+
+ @IBOutlet weak var publicKeyField: UITextField!
+ @IBOutlet weak var preSharedKeyField: UITextField!
+ @IBOutlet weak var allowedIpsField: UITextField!
+ @IBOutlet weak var endpointField: UITextField!
+ @IBOutlet weak var persistentKeepaliveField: UITextField!
}
+extension PeerTableViewCell: UITextFieldDelegate {
+ func textFieldDidBeginEditing(_ textField: UITextField) {
+ print("\(textField) \(textField.text)")
+ }
+
+ func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
+ print("\(string)")
+ return true
+ }
+}
+
class AddPeerTableViewCell: UITableViewCell {
+ var model: Interface?
+
+ @IBAction func addPeer(_ sender: Any) {
+ //TODO implement
+ print("Implement add peer")
+ }
}