Browse Source

Merge branch 'refreshKFTC'

Conflicts:
	GMERemittance/Utility/SecureKeypad.swift
pull/1/head
InKwon James Kim 5 years ago
parent
commit
67b4dd29e5
  1. 160
      GMERemittance/Module/Login/User Interface/View/LoginViewController.swift
  2. 316
      GMERemittance/Utility/SecureKeypad.swift

160
GMERemittance/Module/Login/User Interface/View/LoginViewController.swift

@ -50,22 +50,17 @@ class LoginViewController: UIViewController {
@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!
var encryptedPassword : String? {
didSet {
guard
let email = self.userNameTextField.text,
let pw = self.encryptedPassword,
email != "", pw != "" else {return}
self.login(UIButton())
}
}
// MARK: Properties
var presenter: LoginModuleInterface?
@ -81,17 +76,10 @@ class LoginViewController: UIViewController {
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()
}
@ -127,8 +115,6 @@ class LoginViewController: UIViewController {
// showAnimation()
}
func authenticateUser() {
let context : LAContext = LAContext()
var error: NSError?
@ -159,28 +145,7 @@ class LoginViewController: UIViewController {
}
}
func setupKeyboard() {
isShowNumber = false
isShowQwerty = true
isTranskeyShowing = false
let iv: Array<String> = ["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_Supported(byDeviceOrientation: SupportedByDevicePortrait)
// ccr key
mQwertyTransKeyView?.mTK_LicenseCheck("license_mtranskey")
}
private func configureLanguage() {
// Localize.setCurrentLanguage("en")
self.headerTitle.text = StringConstants().headerTitle
self.subtitle.text = StringConstants().subHeaderTitle
self.userIdTitleLabel.text = "email_text".localized()
@ -270,20 +235,13 @@ class LoginViewController: UIViewController {
let isUseBiometricAuth = KeyChain.shared.get(key: .biometricAuth),
email == typedEmail,
isUseBiometricAuth == "1" else {
self.showQwertyTranskeyAction()
let secureKeypad = SecureKeypad(target: self)
secureKeypad.delegate = self
secureKeypad.present(animated: true)
return
}
BiometricAuthenticationWireframe().openWithDelegate(on: self, delegate: self)
// guard let email = self.userNameTextField.text,
// let isUseBiometricAuth = UserKeychain(email: email).isUseBiometricAuth,
// isUseBiometricAuth,
// let password = UserKeychain.default.encryptedPassword, password != "" else {
// self.showQwertyTranskeyAction()
// return
// }
// BiometricAuthenticationWireframe().openWithDelegate(on: self, delegate: self)
}
}
@ -302,77 +260,7 @@ extension LoginViewController: LoginViewInterface {
}
}
extension LoginViewController: TransKeyViewDelegate {
func secureInputFinish(_ type: Int) {
var targetView : TransKeyView?
if isShowQwerty == true {
qwertyCipherString = mQwertyTransKeyView?.mTK_GetSecureData()
targetView = mQwertyTransKeyView
if mQwertyTransKeyView?.mTK_GetDataLength() == 0 {
self.encryptedPassword = ""
self.passwordTextField.text = ""
}else {
self.encryptedPassword = qwertyCipherString
self.passwordTextField.text = "password"
}
}
isShowQwerty = false
isShowNumber = false
isTranskeyShowing = false
targetView?.dismiss(animated: true, completion: {
guard let email = self.userNameTextField.text, let pw = self.encryptedPassword,
email != "", pw != "" else {return}
self.login(UIButton())
})
}
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_UseShiftOptional(true)
// 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(true)
mQwertyTransKeyView?.mTK_SetUseBalloonImageButton(true)
if let mQwertyTransKeyView = mQwertyTransKeyView {
self.present(mQwertyTransKeyView, animated: true, completion: nil)
}
}
}
}
// MARK: - UITextFieldDelegate
extension LoginViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField == passwordTextField {
@ -390,6 +278,8 @@ extension LoginViewController: UITextFieldDelegate {
}
}
// MARK: - BiometricAuthenticationViewControllerDelegate
extension LoginViewController: BiometricAuthenticationViewControllerDelegate {
func viewController(_ viewController: BiometricAuthenticationViewController, informationTitleLabel titleLabel: UILabel, authenticationButton button: UIButton) {
titleLabel.text = "Please enter authentication information for login"
@ -409,8 +299,10 @@ extension LoginViewController: BiometricAuthenticationViewControllerDelegate {
switch error {
case .userFallback, .biometryNotAvailable:
viewController.dismiss(animated: true){
self.showQwertyTranskeyAction()
viewController.dismiss(animated: true) {
let secureKeypad = SecureKeypad(target: viewController)
secureKeypad.delegate = self
secureKeypad.present(animated: true)
}
case .notBeConfigured, .biometryNotEnrolled:
@ -430,3 +322,13 @@ extension LoginViewController: BiometricAuthenticationViewControllerDelegate {
}
}
// MARK: - SecureKeypadDelegate
extension LoginViewController: SecureKeypadDelegate {
func didComplete(_ encryptedString: String) {
if encryptedString != "" {
self.encryptedPassword = encryptedString
self.passwordTextField.text = "password"
}
}
}

316
GMERemittance/Utility/SecureKeypad.swift

@ -9,184 +9,184 @@
import Foundation
protocol SecureKeypadDelegate: class {
func didComplete(_ encryptedString: String)
func didComplete(_ encryptedString: String)
}
enum SecureKeypadType {
case ascii
case numberic
case ascii
case numberic
}
class SecureKeypad: NSObject {
weak var delegate: SecureKeypadDelegate?
var title = "" {
didSet {
self.updateUI()
}
weak var delegate: SecureKeypadDelegate?
var title = "Enter Your GME Password" {
didSet {
self.updateUI()
}
var placeholder = "" {
didSet {
self.updateUI()
}
}
var placeholder = "Enter Your GME Password" {
didSet {
self.updateUI()
}
var placeholderFont: UIFont? = .systemFont(ofSize: 17) {
didSet {
self.updateUI()
}
}
var placeholderFont: UIFont? = UIFont(name: "SanFranciscoDisplay-Regular", size: 15) {
didSet {
self.updateUI()
}
private lazy var asciiKeypad = TransKeyView()
private lazy var numberPad = TransKeyView()
private var target: UIViewController!
private var keypadType: SecureKeypadType = .ascii
private var encryptedString = ""
init(target: UIViewController, keypadType: SecureKeypadType = .ascii) {
super.init()
self.target = target
self.keypadType = keypadType
self.initKeypad()
}
private lazy var asciiKeypad = TransKeyView()
private lazy var numberPad = TransKeyView()
private var target: UIViewController!
private var keypadType: SecureKeypadType = .ascii
private var encryptedString = ""
init(target: UIViewController, keypadType: SecureKeypadType = .ascii) {
super.init()
self.target = target
self.keypadType = keypadType
self.initKeypad()
}
deinit {
self.asciiKeypad.mTK_ClearDelegateSubviews()
self.numberPad.mTK_ClearDelegateSubviews()
self.asciiKeypad.delegate = nil;
self.numberPad.delegate = nil;
}
func present(animated: Bool, completion: (() -> Void)? = nil) {
let vc: TransKeyView
switch keypadType {
case .ascii:
vc = self.asciiKeypad
case .numberic:
vc = self.numberPad
}
deinit {
self.asciiKeypad.mTK_ClearDelegateSubviews()
self.numberPad.mTK_ClearDelegateSubviews()
self.asciiKeypad.delegate = nil;
self.numberPad.delegate = nil;
self.target.present(vc, animated: true, completion: completion)
}
private func updateUI() {
switch self.keypadType {
case .ascii:
self.updateASCIIUI()
case .numberic:
self.updateNumber()
}
func present(animated: Bool, completion: (() -> Void)? = nil) {
let vc: TransKeyView
switch keypadType {
case .ascii:
vc = self.asciiKeypad
case .numberic:
vc = self.numberPad
}
self.target.present(vc, animated: true, completion: completion)
}
private func initKeypad(){
switch self.keypadType {
case .ascii:
self.initASCIIKeypad()
self.updateASCIIUI()
case.numberic:
//TODO: Numberic keypad
self.initNumberKeypad()
self.updateNumber()
break
}
}
/// init ASCII keypad
private func initASCIIKeypad() {
asciiKeypad.mTK_Init(self)
asciiKeypad.delegate = self
asciiKeypad.mTK_MakeSecureKey()
asciiKeypad.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.")
asciiKeypad.mTK_UseCursor(true)
asciiKeypad.mTK_UseAllDeleteButton(true)
asciiKeypad.mTK_UseNavigationBar(true)
asciiKeypad.mTK_UseVoiceOver(true)
asciiKeypad.mTK_setHideInputPasswordDelay(3)
asciiKeypad.mTK_SetControlCenter(false)
asciiKeypad.mTK_setIgnoreStatusbar(false)
asciiKeypad.mTK_UseShiftOptional(true)
asciiKeypad.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
asciiKeypad.mTK_EnableSamekeyInputDataEncrypt(true)
asciiKeypad.mTK_SetUseBalloonImageButton(true)
asciiKeypad.mTK_LicenseCheck("license_mtranskey")
}
/// update ASCII UI
private func updateASCIIUI() {
asciiKeypad.mTK_SetHint(self.placeholder, font: self.placeholderFont)
asciiKeypad.setKeyboardType(
self,
keypadType: 0,
mTK_inputType: 2,
mTK_inputTitle: self.title,
mTK_cryptType: 0,
mTK_maxLength: 100,
mTK_minLength: 0,
mTK_keypadUpper: false,
mTK_languageType: 1
)
}
private func initNumberKeypad(){
numberPad.mTK_Init(self)
numberPad.delegate = self
numberPad.mTK_MakeSecureKey()
numberPad.mTK_LicenseCheck("license_mtranskey")
numberPad.mTK_ShowMessageIfMinLength("0자리 이상 입력해주세요.")
numberPad.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.")
numberPad.mTK_UseVoiceOver(false)
numberPad.mTK_setIgnoreStatusbar(false)
numberPad.mTK_SetControlCenter(false)
numberPad.mTK_UseAllDeleteButton(false)
numberPad.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
}
private func updateNumber(){
numberPad.mTK_SetHint(self.placeholder, font: self.placeholderFont)
numberPad.setKeyboardType(
self,
keypadType: TransKeyKeypadTypeText,
mTK_inputType: 2,
mTK_inputTitle: self.title,
mTK_cryptType: 0,
mTK_maxLength: 16,
mTK_minLength: 0,
mTK_keypadUpper: false,
mTK_languageType: Int(mTK_Language_English.rawValue)
)
}
}
extension SecureKeypad: TransKeyViewDelegate {
func secureInputFinish(_ type: Int) {
let vc: TransKeyView
private func updateUI() {
switch self.keypadType {
case .ascii:
self.updateASCIIUI()
case .numberic:
self.updateNumber()
}
}
private func initKeypad(){
switch self.keypadType {
case .ascii:
self.initASCIIKeypad()
self.updateASCIIUI()
case.numberic:
//TODO: Numberic keypad
self.initNumberKeypad()
self.updateNumber()
break
}
switch keypadType {
case .ascii:
vc = self.asciiKeypad
case .numberic:
vc = self.numberPad
}
self.encryptedString = vc.mTK_GetSecureData()
/// init ASCII keypad
private func initASCIIKeypad() {
asciiKeypad.mTK_Init(self)
asciiKeypad.delegate = self
asciiKeypad.mTK_MakeSecureKey()
asciiKeypad.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.")
asciiKeypad.mTK_UseCursor(true)
asciiKeypad.mTK_UseAllDeleteButton(true)
asciiKeypad.mTK_UseNavigationBar(true)
asciiKeypad.mTK_UseVoiceOver(true)
asciiKeypad.mTK_setHideInputPasswordDelay(3)
asciiKeypad.mTK_SetControlCenter(false)
asciiKeypad.mTK_setIgnoreStatusbar(false)
asciiKeypad.mTK_UseShiftOptional(true)
asciiKeypad.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
asciiKeypad.mTK_EnableSamekeyInputDataEncrypt(true)
asciiKeypad.mTK_SetUseBalloonImageButton(true)
asciiKeypad.mTK_LicenseCheck("license_mtranskey")
if vc.mTK_GetDataLength() == 0 {
self.encryptedString = ""
}
/// update ASCII UI
private func updateASCIIUI() {
asciiKeypad.mTK_SetHint(self.placeholder, font: self.placeholderFont)
asciiKeypad.setKeyboardType(
self,
keypadType: 0,
mTK_inputType: 2,
mTK_inputTitle: self.title,
mTK_cryptType: 0,
mTK_maxLength: 100,
mTK_minLength: 0,
mTK_keypadUpper: false,
mTK_languageType: 1
)
}
private func initNumberKeypad(){
numberPad.mTK_Init(self)
numberPad.delegate = self
numberPad.mTK_MakeSecureKey()
numberPad.mTK_LicenseCheck("license_mtranskey")
numberPad.mTK_ShowMessageIfMinLength("0자리 이상 입력해주세요.")
numberPad.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.")
numberPad.mTK_UseVoiceOver(false)
numberPad.mTK_setIgnoreStatusbar(false)
numberPad.mTK_SetControlCenter(false)
numberPad.mTK_UseAllDeleteButton(false)
numberPad.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
}
private func updateNumber(){
numberPad.mTK_SetHint(self.placeholder, font: self.placeholderFont)
numberPad.setKeyboardType(
self,
keypadType: TransKeyKeypadTypeText,
mTK_inputType: 2,
mTK_inputTitle: self.title,
mTK_cryptType: 0,
mTK_maxLength: 16,
mTK_minLength: 0,
mTK_keypadUpper: false,
mTK_languageType: Int(mTK_Language_English.rawValue)
)
}
}
extension SecureKeypad: TransKeyViewDelegate {
func secureInputFinish(_ type: Int) {
let vc: TransKeyView
switch keypadType {
case .ascii:
vc = self.asciiKeypad
case .numberic:
vc = self.numberPad
}
self.encryptedString = vc.mTK_GetSecureData()
if vc.mTK_GetDataLength() == 0 {
self.encryptedString = ""
}
vc.dismiss(animated: true){
self.delegate?.didComplete(self.encryptedString)
}
vc.dismiss(animated: true){
self.delegate?.didComplete(self.encryptedString)
}
}
}
Loading…
Cancel
Save