You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

178 lines
5.8 KiB

5 years ago
5 years ago
  1. //
  2. // LauncherScreenWireframe.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 22/07/2019.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import LGSideMenuController
  10. class LauncherScreenWireframe {
  11. weak var view: UIViewController!
  12. private var biometricViewController: UIViewController?
  13. }
  14. extension LauncherScreenWireframe: LauncherScreenWireframeInput {
  15. var storyboardName: String {return "LauncherScreen"}
  16. func getMainView() -> UIViewController {
  17. let service = LauncherScreenService()
  18. let interactor = LauncherScreenInteractor(service: service)
  19. let presenter = LauncherScreenPresenter()
  20. let viewController = viewControllerFromStoryboard(of: LauncherScreenViewController.self)
  21. viewController.presenter = presenter
  22. interactor.output = presenter
  23. presenter.interactor = interactor
  24. presenter.wireframe = self
  25. presenter.view = viewController
  26. view = viewController
  27. return viewController
  28. }
  29. func goSplashScreen() {
  30. let splashWireframe = SplashScreenWireframe()
  31. let splashViewController = splashWireframe.getMainView()
  32. let nav = UINavigationController(rootViewController: splashViewController)
  33. window?.rootViewController = nav
  34. }
  35. func openAuthenticationScreen() {
  36. let biometricAuthenticationWireframe = BiometricAuthenticationWireframe()
  37. biometricAuthenticationWireframe.openWithDelegate(
  38. on: view,
  39. delegate: self
  40. )
  41. }
  42. }
  43. // MARK: - BiometricAuthenticationViewControllerDelegate
  44. extension LauncherScreenWireframe: BiometricAuthenticationViewControllerDelegate {
  45. func viewController(
  46. _ viewController: BiometricAuthenticationViewController,
  47. informationTitleLabel titleLabel: UILabel,
  48. authenticationButton button: UIButton
  49. ) {
  50. biometricViewController = viewController
  51. titleLabel.text = "bio_login_intro_text".localized()
  52. button.setTitle("login_text".localized(), for: .normal)
  53. }
  54. func didComplete(_ viewController: BiometricAuthenticationViewController) {
  55. self.doLogin()
  56. }
  57. func viewController(
  58. _ viewController: BiometricAuthenticationViewController,
  59. didFailWithError error: BiometricAuthenticationError,
  60. errorMessage: String?
  61. ) {
  62. print("BiometricAuthenticationWireframe Error: \(errorMessage ?? "")")
  63. // if don't use biometric authentication or user press password
  64. DispatchQueue.main.async {
  65. switch error {
  66. case .biometryNotAvailable, .userFallback:
  67. let secureKeypad = SecureKeypad(target: viewController)
  68. secureKeypad.delegate = self
  69. secureKeypad.present(animated: true)
  70. case .notBeConfigured, .biometryNotEnrolled:
  71. viewController.alert(type: .error, message: error.message)
  72. default:
  73. break
  74. }
  75. }
  76. }
  77. func doSelectLocalAuthenticationPolicy(
  78. _ viewController: BiometricAuthenticationViewController
  79. ) -> BiometricAuthenticationPolicy {
  80. return .deviceOwnerAuthenticationWithBiometrics
  81. }
  82. }
  83. // MARK: - SecureKeypadDelegate
  84. extension LauncherScreenWireframe: SecureKeypadDelegate {
  85. func didComplete(_ encryptedString: String, garbagePassword: String, length: Int) {
  86. if encryptedString != "" {
  87. KeyChain.shared.save(data: encryptedString, key: .password)
  88. doLogin()
  89. }
  90. }
  91. }
  92. // MARK: - Other Methods
  93. extension LauncherScreenWireframe {
  94. private func doLogin() {
  95. biometricViewController?.showProgressHud(backgroundColor: .clear, loadingColor: .white, textColor: .white)
  96. let loginService = LoginService()
  97. guard let userID = KeyChain.shared.get(key: .id),
  98. let password = KeyChain.shared.get(key: .password) else {
  99. (view as? LauncherScreenViewController)?.presenter?.goSplashScreen()
  100. return
  101. }
  102. loginService.accessCode(
  103. userId: userID,
  104. password: password,
  105. success: { (user) in
  106. let accessCode = user?.accessCode ?? ""
  107. let accessCodeBase64 = accessCode
  108. Utility.save(user: user, accessCodeBase64: accessCodeBase64, password: password, login: true)
  109. let mainWireFrame = MainWireframe.shared
  110. let tabBarViewController = mainWireFrame?.getMainView()
  111. guard let sidemenuVc = UIStoryboard(name: "SideMenu", bundle: nil).instantiateViewController(
  112. withIdentifier: "SideMenuViewController"
  113. ) as? SideMenuViewController else {
  114. return
  115. }
  116. let sideMenuController = LGSideMenuController(
  117. rootViewController: tabBarViewController,
  118. leftViewController: sidemenuVc,
  119. rightViewController: nil
  120. )
  121. sideMenuController.rootViewLayerShadowColor = UIColor(white: 0.9, alpha: 0.6)
  122. sideMenuController.rootViewLayerShadowRadius = 8.0
  123. sideMenuController.leftViewPresentationStyle = .scaleFromBig
  124. sideMenuController.leftViewWidth = UIScreen.main.bounds.width - 70.0
  125. sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular)
  126. self.biometricViewController?.hideProgressHud()
  127. self.biometricViewController?.dismiss(animated: true) {
  128. self.window?.backgroundColor = sidemenuVc.view.backgroundColor
  129. self.window?.rootViewController = sideMenuController
  130. }
  131. },
  132. failure: { (error) in
  133. self.biometricViewController?.hideProgressHud()
  134. self.biometricViewController?.alert(
  135. type: .error,
  136. message: error.localizedDescription,
  137. title: "Warning"
  138. ) {
  139. // if failed login, remove all in keychain, change logout status and then go splash screen
  140. KeyChain.shared.removeAll()
  141. self.biometricViewController?.dismiss(animated: true) {
  142. (self.view as? LauncherScreenViewController)?.presenter?.goSplashScreen()
  143. }
  144. }
  145. }
  146. )
  147. }
  148. }