Added ability to add tunnels with a QR code scan. Logic in place to parse conf files as well.

Signed-off-by: Eric Kuck <eric@bluelinelabs.com>
This commit is contained in:
Eric Kuck
2018-08-21 11:00:41 -05:00
parent c2b591cc44
commit 39ae9db11c
10 changed files with 325 additions and 8 deletions
+37 -4
View File
@@ -32,7 +32,6 @@ class AppCoordinator: RootViewCoordinator {
return self.tunnelsTableViewController
}
var tunnelsTableViewController: TunnelsTableViewController!
/// Window to manage
@@ -134,10 +133,33 @@ class AppCoordinator: RootViewCoordinator {
extension AppCoordinator: TunnelsTableViewControllerDelegate {
func addProvider(tunnelsTableViewController: TunnelsTableViewController) {
let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
actionSheet.addAction(UIAlertAction(title: "Add Manually", style: .default) { [unowned self] _ in
self.addProviderManually()
})
actionSheet.addAction(UIAlertAction(title: "Scan QR Code", style: .default) { [unowned self] _ in
self.addProviderWithQRScan()
})
actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel))
tunnelsTableViewController.present(actionSheet, animated: true, completion: nil)
}
func addProviderManually() {
let addContext = persistentContainer.newBackgroundContext()
showTunnelConfigurationViewController(tunnel: nil, context: addContext)
}
func addProviderWithQRScan() {
let addContext = persistentContainer.newBackgroundContext()
let qrScanViewController = storyboard.instantiateViewController(type: QRScanViewController.self)
qrScanViewController.configure(context: addContext, delegate: self)
self.navigationController.pushViewController(qrScanViewController, animated: true)
}
func connect(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) {
let manager = self.providerManager(for: tunnel)!
let block = {
@@ -237,10 +259,8 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
return tunnelIdentifier == tunnel.tunnelIdentifier
}
}
}
extension AppCoordinator: TunnelConfigurationTableViewControllerDelegate {
func didSave(tunnel: Tunnel, tunnelConfigurationTableViewController: TunnelConfigurationTableViewController) {
private func saveTunnel(_ tunnel: Tunnel) {
let manager = providerManager(for: tunnel) ?? NETunnelProviderManager()
manager.localizedDescription = tunnel.title
@@ -265,5 +285,18 @@ extension AppCoordinator: TunnelConfigurationTableViewControllerDelegate {
navigationController.popToRootViewController(animated: true)
}
}
extension AppCoordinator: TunnelConfigurationTableViewControllerDelegate {
func didSave(tunnel: Tunnel, tunnelConfigurationTableViewController: TunnelConfigurationTableViewController) {
saveTunnel(tunnel)
}
}
extension AppCoordinator: QRScanViewControllerDelegate {
func didSave(tunnel: Tunnel, qrScanViewController: QRScanViewController) {
showTunnelConfigurationViewController(tunnel: tunnel, context: tunnel.managedObjectContext!)
}
}