diff options
author | Roopesh Chander <roop@roopc.net> | 2018-10-28 22:22:27 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2018-10-28 22:22:32 +0530 |
commit | 08c855fce6b4c5511d0f9501acb8dab548fd53ba (patch) | |
tree | 422fc4388c151abdd1987928abfe7a0ec3a8306e /WireGuard | |
parent | Info.plist: Indicate that the app shall use the camera (diff) | |
download | wireguard-apple-08c855fce6b4c5511d0f9501acb8dab548fd53ba.tar.xz wireguard-apple-08c855fce6b4c5511d0f9501acb8dab548fd53ba.zip |
QR code: Integrate Eric's QR code scanner
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard')
-rw-r--r-- | WireGuard/WireGuard.xcodeproj/project.pbxproj | 4 | ||||
-rw-r--r-- | WireGuard/WireGuard/UI/iOS/QRScanViewController.swift | 25 | ||||
-rw-r--r-- | WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift | 21 |
3 files changed, 36 insertions, 14 deletions
diff --git a/WireGuard/WireGuard.xcodeproj/project.pbxproj b/WireGuard/WireGuard.xcodeproj/project.pbxproj index ea3bd32..d170780 100644 --- a/WireGuard/WireGuard.xcodeproj/project.pbxproj +++ b/WireGuard/WireGuard.xcodeproj/project.pbxproj @@ -29,6 +29,7 @@ 6F7774EF21722D97006A79B3 /* TunnelsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7774EE21722D97006A79B3 /* TunnelsManager.swift */; }; 6F7774F321774263006A79B3 /* TunnelEditTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7774F221774263006A79B3 /* TunnelEditTableViewController.swift */; }; 6FDEF7E421846C1A00D8FBF6 /* libwg-go.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FDEF7E321846C1A00D8FBF6 /* libwg-go.a */; }; + 6FDEF7E62185EFB200D8FBF6 /* QRScanViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FDEF7E52185EFAF00D8FBF6 /* QRScanViewController.swift */; }; 6FF4AC1F211EC472002C96EB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6FF4AC1E211EC472002C96EB /* Assets.xcassets */; }; 6FF4AC22211EC472002C96EB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6FF4AC20211EC472002C96EB /* LaunchScreen.storyboard */; }; 6FF4AC472120B9E0002C96EB /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FF4AC462120B9E0002C96EB /* NetworkExtension.framework */; }; @@ -92,6 +93,7 @@ 6F7774EE21722D97006A79B3 /* TunnelsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelsManager.swift; sourceTree = "<group>"; }; 6F7774F221774263006A79B3 /* TunnelEditTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelEditTableViewController.swift; sourceTree = "<group>"; }; 6FDEF7E321846C1A00D8FBF6 /* libwg-go.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libwg-go.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6FDEF7E52185EFAF00D8FBF6 /* QRScanViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRScanViewController.swift; sourceTree = "<group>"; }; 6FF4AC14211EC46F002C96EB /* WireGuard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WireGuard.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6FF4AC1E211EC472002C96EB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 6FF4AC21211EC472002C96EB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; @@ -170,6 +172,7 @@ 6F7774DE217181B1006A79B3 /* iOS */ = { isa = PBXGroup; children = ( + 6FDEF7E52185EFAF00D8FBF6 /* QRScanViewController.swift */, 6F7774E0217181B1006A79B3 /* AppDelegate.swift */, 6F7774DF217181B1006A79B3 /* MainViewController.swift */, 6F7774E321718281006A79B3 /* TunnelsListTableViewController.swift */, @@ -392,6 +395,7 @@ 6F5D0C1521832391000F85AD /* DNSResolver.swift in Sources */, 6F5D0C482183C6A3000F85AD /* PacketTunnelOptionsGenerator.swift in Sources */, 6F693A562179E556008551C1 /* Endpoint.swift in Sources */, + 6FDEF7E62185EFB200D8FBF6 /* QRScanViewController.swift in Sources */, 6F6899A62180447E0012E523 /* x25519.c in Sources */, 6F5D0C452183BCDA000F85AD /* PacketTunnelOptionKey.swift in Sources */, 6F7774E2217181B1006A79B3 /* AppDelegate.swift in Sources */, diff --git a/WireGuard/WireGuard/UI/iOS/QRScanViewController.swift b/WireGuard/WireGuard/UI/iOS/QRScanViewController.swift index f15d30b..e95ff08 100644 --- a/WireGuard/WireGuard/UI/iOS/QRScanViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/QRScanViewController.swift @@ -11,25 +11,21 @@ import CoreData import UIKit protocol QRScanViewControllerDelegate: class { - func didSave(tunnel: Tunnel, qrScanViewController: QRScanViewController) + func scannedQRCode(tunnelConfiguration: TunnelConfiguration, qrScanViewController: QRScanViewController) } class QRScanViewController: UIViewController { - - private var viewContext: NSManagedObjectContext! - private weak var delegate: QRScanViewControllerDelegate? + weak var delegate: QRScanViewControllerDelegate? var captureSession: AVCaptureSession? = AVCaptureSession() let metadataOutput = AVCaptureMetadataOutput() var previewLayer: AVCaptureVideoPreviewLayer! - func configure(context: NSManagedObjectContext, delegate: QRScanViewControllerDelegate? = nil) { - viewContext = context - self.delegate = delegate - } - override func viewDidLoad() { super.viewDidLoad() + self.title = "Scan QR code" + self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelTapped)) + guard let videoCaptureDevice = AVCaptureDevice.default(for: .video), let videoInput = try? AVCaptureDeviceInput(device: videoCaptureDevice), let captureSession = captureSession, @@ -69,8 +65,9 @@ class QRScanViewController: UIViewController { func scanDidComplete(withCode code: String) { do { - let tunnel = try Tunnel.fromConfig(code, context: viewContext) - delegate?.didSave(tunnel: tunnel, qrScanViewController: self) + let tunnelConfiguration = try WgQuickConfigFileParser.parse(code, name: "Scanned") + delegate?.scannedQRCode(tunnelConfiguration: tunnelConfiguration, qrScanViewController: self) + dismiss(animated: true, completion: nil) } catch { scanDidEncounterError(title: "Invalid Code", message: "The scanned code is not a valid WireGuard config file.") } @@ -85,6 +82,9 @@ class QRScanViewController: UIViewController { captureSession = nil } + @objc func cancelTapped() { + dismiss(animated: true, completion: nil) + } } extension QRScanViewController: AVCaptureMetadataOutputObjectsDelegate { @@ -101,7 +101,4 @@ extension QRScanViewController: AVCaptureMetadataOutputObjectsDelegate { AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) scanDidComplete(withCode: stringValue) } - } - -extension QRScanViewController: Identifyable {} diff --git a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift index 884c4a9..6aaf8db 100644 --- a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift @@ -47,6 +47,11 @@ class TunnelsListTableViewController: UITableViewController { } alert.addAction(importFileAction) + let scanQRCodeAction = UIAlertAction(title: "Scan QR code", style: .default) { [weak self] (action) in + self?.presentViewControllerForScanningQRCode() + } + alert.addAction(scanQRCodeAction) + let createFromScratchAction = UIAlertAction(title: "Create from scratch", style: .default) { [weak self] (action) in if let s = self, let tunnelsManager = s.tunnelsManager { s.presentViewControllerForTunnelCreation(tunnelsManager: tunnelsManager, tunnelConfiguration: nil) @@ -96,6 +101,14 @@ class TunnelsListTableViewController: UITableViewController { self.present(filePicker, animated: true) } + func presentViewControllerForScanningQRCode() { + let scanQRCodeVC = QRScanViewController() + scanQRCodeVC.delegate = self + let scanQRCodeNC = UINavigationController(rootViewController: scanQRCodeVC) + scanQRCodeNC.modalPresentationStyle = .fullScreen + self.present(scanQRCodeNC, animated: true) + } + func showErrorAlert(title: String, message: String) { let okAction = UIAlertAction(title: "Ok", style: .default) let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) @@ -130,6 +143,14 @@ extension TunnelsListTableViewController: UIDocumentPickerDelegate { } } +// MARK: QRScanViewControllerDelegate + +extension TunnelsListTableViewController: QRScanViewControllerDelegate { + func scannedQRCode(tunnelConfiguration: TunnelConfiguration, qrScanViewController: QRScanViewController) { + print("Scanned QR code") // TODO + } +} + // MARK: UITableViewDataSource extension TunnelsListTableViewController { |