// // LoginViewController.swift // GMERemittance // // Created by gme_2 on 07/09/2018. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import Localize_Swift import LocalAuthentication class LoginViewController: UIViewController { struct StringConstants { let headerTitle = "login_title_text".localized() let subHeaderTitle = "login_subtitle_text".localized() let userIdTitle = "login_user_id_text".localized() let userIdPlaceholder = "user_Id_placeholder_text".localized() let passwordTitle = "password_text".localized() let forgotPasswordText = "forgot_password_text".localized() let newToGmeText = "new_to_gme_text".localized() let registerHereText = "login_register_here_text".localized() let loginText = "login_text".localized() } // MARK: IBOutlets @IBOutlet weak var userNameTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! // views @IBOutlet weak var backgroundTextfieldsView: UIView! @IBOutlet weak var userIdBackgroundView: UIView! @IBOutlet weak var passwordBackgroundView: UIView! @IBOutlet weak var headerTitle: UILabel! @IBOutlet weak var subtitle: UILabel! @IBOutlet weak var userIdTitleLabel: UILabel! @IBOutlet weak var passwordTitleLabel: UILabel! @IBOutlet weak var newToGmeLabel: UILabel! @IBOutlet weak var registerHereButton: UIButton! @IBOutlet weak var forgotPasswordButton: UIButton! @IBOutlet weak var forgotPasswordView: UIView! @IBOutlet weak var logoImageView: UIImageView! @IBOutlet weak var loginButton: UIButton! // keyboard var mQwertyTransKeyView : TransKeyView? var mNumberTransKeyView : TransKeyView? var secureKey : NSData! var encryptedPassword : String? var numberCipherString : String! var qwertyCipherString : String! var isTranskeyShowing : Bool! var isShowQwerty : Bool! = true var isShowNumber : Bool! // MARK: Properties var presenter: LoginModuleInterface? // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() configureLanguage() } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) mQwertyTransKeyView?.mTK_ClearDelegateSubviews() mNumberTransKeyView?.mTK_ClearDelegateSubviews() if isTranskeyShowing == false { mQwertyTransKeyView?.delegate = nil; mNumberTransKeyView?.delegate = nil; } } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.setupKeyboard() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationItem.title = "" } // MARK: IBActions @IBAction func forgotPassword(_ sender: UIButton) { self.presenter?.forgotPassword() } @IBAction func register(_ sender: UIButton) { self.presenter?.register() } @IBAction func login(_ sender: UIButton) { let username = self.userNameTextField.text! let password = self.passwordTextField.text! self.presenter?.login(userName: username, password: password, encryptedPassword: self.encryptedPassword ?? "") } // MARK: Other Functions private func setup() { // all setup should be done here setupNavBar() setupColor() self.passwordTextField.delegate = self // showAnimation() } func authenticateUser() { let context : LAContext = LAContext() var error: NSError? let reasonString = "Authentication is needed to access Gme Remit application." if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) { context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString) { (success, error) in if success { print("authenticated") } else { // print(evalPolicyError?.localizedDescription) guard let error = error as NSError? else {return} switch error.code { case LAError.systemCancel.rawValue: print("Authentication was cancell by the system") case LAError.userCancel.rawValue: print("Authentication cancelled by the user") case LAError.userFallback.rawValue: print("user selected to enter custome password") default: print("Authentication failed.") } } } } } func setupKeyboard() { isShowNumber = false isShowQwerty = true isTranskeyShowing = false let iv: Array = ["M", "o", "b", "i", "l", "e", "T", "r" , "a", "n", "s", "K", "e", "y", "1", "0"] secureKey = NSData(bytes: iv, length: 16) setQwertyTranskey() // self.showQwertyTranskeyAction() } func setQwertyTranskey() { mQwertyTransKeyView = TransKeyView() mQwertyTransKeyView?.mTK_Init(self) mQwertyTransKeyView?.delegate = self mQwertyTransKeyView?.mTK_MakeSecureKey() mQwertyTransKeyView?.mTK_EnableSamekeyInputDataEncrypt(false) mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortrait) // ccr key mQwertyTransKeyView?.mTK_LicenseCheck("license_IBK_TEST_IONEBANK_20181105_20190531") } private func configureLanguage() { // Localize.setCurrentLanguage("en") self.headerTitle.text = StringConstants().headerTitle self.subtitle.text = StringConstants().subHeaderTitle self.userIdTitleLabel.text = StringConstants().userIdTitle self.userNameTextField.placeholder = StringConstants().userIdPlaceholder self.passwordTitleLabel.text = StringConstants().passwordTitle self.forgotPasswordButton.setTitle(StringConstants().forgotPasswordText, for: .normal) self.newToGmeLabel.text = StringConstants().newToGmeText self.registerHereButton.setTitle(StringConstants().registerHereText, for: .normal) self.loginButton.setTitle(StringConstants().loginText, for: .normal) } func setupColor() { self.loginButton.backgroundColor = AppConstants.themeRedColor self.headerTitle.textColor = AppConstants.themeRedColor } func showAnimation() { setupInitialPositionsOfviews() animateViews() } private func setupInitialPositionsOfviews() { self.userIdBackgroundView.center.x -= self.view.bounds.width self.passwordBackgroundView.center.x -= self.view.bounds.width self.loginButton.transform = CGAffineTransform.init(scaleX: 0, y: 1) self.headerTitle.alpha = 0 self.headerTitle.center.y -= 200 self.subtitle.alpha = 0 self.forgotPasswordView.alpha = 0 self.logoImageView.center.y += (self.logoImageView.bounds.height + 20) self.loginButton.setTitle("", for: UIControlState.normal) } private func animateViews() { // user id UIView.animate(withDuration: 0.5, animations: { self.userIdBackgroundView.center.x += self.view.bounds.width }) // password UIView.animate(withDuration: 0.5, delay: 0.3, options: [], animations: { self.passwordBackgroundView.center.x += self.view.bounds.width }, completion: nil) // login button UIView.animate(withDuration: 0.5, delay: 0.4, options: [], animations: { self.loginButton.transform = CGAffineTransform.identity }, completion: { (_) in self.loginButton.setTitle("Login", for: UIControlState.normal) }) // subtitle UIView.animate(withDuration: 0.5, delay: 0.7, options: [], animations: { self.subtitle.alpha = 1 }, completion: nil) // forgot password UIView.animate(withDuration: 0.5, delay: 0.9, options: [], animations: { self.forgotPasswordView.alpha = 1 }) // header title // logoimageview UIView.animate(withDuration: 0.7, delay: 0, options: [], animations: { // todo self.headerTitle.alpha = 1 self.headerTitle.center.y += 200 self.logoImageView.center.y -= (self.logoImageView.bounds.height + 20) }, completion: nil) } private func setupNavBar() { self.setupPicturedNavBar() } } // MARK: LoginViewInterface extension LoginViewController: LoginViewInterface { func show(error: String) { self.alert(message: error) } func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } } extension LoginViewController: TransKeyViewDelegate { func secureInputFinish(_ type: Int) { var targetView : TransKeyView? if isShowQwerty == true { qwertyCipherString = mQwertyTransKeyView?.mTK_GetSecureData() targetView = mQwertyTransKeyView self.encryptedPassword = qwertyCipherString self.passwordTextField.text = "password" } isShowQwerty = false isShowNumber = false isTranskeyShowing = false targetView?.dismiss(animated: true, completion: nil) } func showQwertyTranskeyAction(){ if mQwertyTransKeyView?.isBeingPresented == false { isShowQwerty = true isTranskeyShowing = true let hintStr = String(format:"password", 0) let font = UIFont(name: "Arial", size: 15) mQwertyTransKeyView?.mTK_SetHint(hintStr, font: font) mQwertyTransKeyView?.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.") mQwertyTransKeyView?.mTK_UseCursor(true) mQwertyTransKeyView?.mTK_UseAllDeleteButton(true) mQwertyTransKeyView?.mTK_UseNavigationBar(true) mQwertyTransKeyView?.mTK_UseVoiceOver(true) mQwertyTransKeyView?.mTK_setHideInputPasswordDelay(3) mQwertyTransKeyView?.mTK_SetControlCenter(false) mQwertyTransKeyView?.mTK_setIgnoreStatusbar(false) // mQwertyTransKeyView?.mTK_SetLanguage(1) mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape) mQwertyTransKeyView?.setKeyboardType(self, keypadType: 0, mTK_inputType: 2, mTK_inputTitle: "password", mTK_cryptType: 0, mTK_maxLength: 100, mTK_minLength: 0, mTK_keypadUpper: false, mTK_languageType: 1) mQwertyTransKeyView?.mTK_EnableSamekeyInputDataEncrypt(false) mQwertyTransKeyView?.mTK_SetUseBalloonImageButton(true) if let mQwertyTransKeyView = mQwertyTransKeyView { self.present(mQwertyTransKeyView, animated: true, completion: nil) } } } } extension LoginViewController: UITextFieldDelegate { func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { if textField == passwordTextField { self.showQwertyTranskeyAction() return false } return true } }