// // BiometricAuthenticationWireframe.swift // GME Remit // // Created by InKwon Kim on 30/03/2019. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import LocalAuthentication class BiometricAuthenticationWireframe { weak var view: UIViewController! var completion: ((String?) -> ())? var information: String? } extension BiometricAuthenticationWireframe: BiometricAuthenticationWireframeInput { var storyboardName: String {return "BiometricAuthentication"} func getMainView() -> UIViewController { let service = BiometricAuthenticationService() let interactor = BiometricAuthenticationInteractor(service: service) let presenter = BiometricAuthenticationPresenter() let viewController = viewControllerFromStoryboard(of: BiometricAuthenticationViewController.self) viewController.presenter = presenter interactor.output = presenter presenter.interactor = interactor presenter.wireframe = self presenter.information = information presenter.view = viewController self.view = viewController return viewController } func showAuthentication() { let context = LAContext() var error: NSError? let msg = "Confirm your fingerprint or face to authenticate." let deviceAuth = LAPolicy.deviceOwnerAuthentication if context.canEvaluatePolicy(deviceAuth, error: &error) { context.evaluatePolicy(deviceAuth, localizedReason: msg, reply: { (success, err) in if success { DispatchQueue.main.async { self.completion?(nil) } } else { let message: String if #available(iOS 11.0, *) { switch err { case LAError.authenticationFailed?: message = "There was a problem verifying your identity." case LAError.userCancel?: message = "You pressed cancel." case LAError.userFallback?: message = "You pressed password." case LAError.biometryNotAvailable?: message = "Face ID/Touch ID is not available." case LAError.biometryNotEnrolled?: message = "Face ID/Touch ID is not set up." case LAError.biometryLockout?: message = "Face ID/Touch ID is locked." default: message = "Face ID/Touch ID may not be configured" } } else { switch err { case LAError.authenticationFailed?: message = "There was a problem verifying your identity." case LAError.userCancel?: message = "You pressed cancel." case LAError.userFallback?: message = "You pressed password." case LAError.touchIDNotAvailable?: message = "Face ID/Touch ID is not available." case LAError.touchIDNotEnrolled?: message = "Face ID/Touch ID is not set up." case LAError.touchIDLockout?: message = "Face ID/Touch ID is locked." default: message = "Face ID/Touch ID may not be configured" } } self.completion?(message) } }) } else { completion?(error?.localizedDescription) } } }