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.

340 lines
12 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // RegisterViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 10/09/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import Localize_Swift
  10. class RegisterViewController: UIViewController {
  11. struct StringConstants {
  12. let userIdTitle = "login_user_id_text".localized()
  13. let useridPlaceholder = "email_text".localized()
  14. let passwordTitle = "password_text".localized()
  15. let passwordPlaceholder = "create_password_text".localized()
  16. let confirmPasswordTitle = "confirm_password_text".localized()
  17. let confirmPasswordPlaceholder = "confirm_password_text".localized()
  18. let dobTitlePlaceholder = "dob_text".localized()
  19. let alreadyHaveAccountText = "already_have_account_text".localized()
  20. let loginText = "login_text".localized()
  21. let registerText = "register_text".localized()
  22. let registerHeader = "register_title_text".localized()
  23. let registerSubtitle = "register_subtitle_text".localized()
  24. }
  25. // MARK: IBOutlets
  26. @IBOutlet weak var emailTextField: UITextField!
  27. @IBOutlet weak var passwordTextField: UITextField!
  28. @IBOutlet weak var confirmPasswordTextfield: UITextField!
  29. @IBOutlet weak var dobTextField: UITextField!
  30. // header labels
  31. @IBOutlet weak var headerLabel: UILabel!
  32. @IBOutlet weak var subHeaderLabel: UILabel!
  33. // title labels
  34. @IBOutlet weak var userIdTitleLabel: UILabel!
  35. @IBOutlet weak var passwordTitleLabel: UILabel!
  36. @IBOutlet weak var confirmPasswordTitleLabel: UILabel!
  37. @IBOutlet weak var dobTitileLabel: UILabel!
  38. @IBOutlet weak var alreadyHaveAccountLabel: UILabel!
  39. // buttons
  40. @IBOutlet weak var loginButton: UIButton!
  41. @IBOutlet weak var registerButton: UIButton!
  42. // MARK: Properties
  43. let datePicker = UIDatePicker()
  44. var presenter: RegisterModuleInterface?
  45. // keyboard
  46. var mQwertyTransKeyView : TransKeyView?
  47. var mNumberTransKeyView : TransKeyView?
  48. var secureKey : NSData!
  49. var numberCipherString : String!
  50. var qwertyCipherString : String!
  51. var isTranskeyShowing : Bool!
  52. var isShowQwerty : Bool! = true
  53. var isShowNumber : Bool!
  54. var password: String! {
  55. didSet {
  56. self.passwordTextField.text = password
  57. }
  58. }
  59. var encryptedPassword: String!
  60. var encryptedConfirmPassword: String!
  61. var confirmPassword: String! {
  62. didSet {
  63. self.confirmPasswordTextfield.text = confirmPassword
  64. }
  65. }
  66. var showingPasswordField = false
  67. var showingConfirmPasswordField: Bool = false
  68. // MARK: VC's Life cycle
  69. override func viewDidLoad() {
  70. super.viewDidLoad()
  71. self.setupKeyboard()
  72. self.setup()
  73. }
  74. override func viewWillAppear(_ animated: Bool) {
  75. super.viewWillAppear(animated)
  76. self.setupPicturedNavBar()
  77. }
  78. override func viewWillDisappear(_ animated: Bool) {
  79. super.viewWillDisappear(animated)
  80. self.navigationItem.title = ""
  81. mQwertyTransKeyView?.mTK_ClearDelegateSubviews()
  82. mNumberTransKeyView?.mTK_ClearDelegateSubviews()
  83. if isTranskeyShowing == false {
  84. mQwertyTransKeyView?.delegate = nil;
  85. mNumberTransKeyView?.delegate = nil;
  86. }
  87. }
  88. // MARK: IBActions
  89. @IBAction func login(_ sender: UIButton) {
  90. self.presenter?.login()
  91. }
  92. private func setupDatePicker() {
  93. self.datePicker.datePickerMode = .date
  94. self.dobTextField.inputView = datePicker
  95. datePicker.maximumDate = Date()
  96. self.datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
  97. }
  98. @objc private func handleDatePicker(sender: UIDatePicker) {
  99. let dateFormatter = DateFormatter()
  100. dateFormatter.dateFormat = "yyyy-MM-dd"
  101. self.dobTextField.text = dateFormatter.string(from: sender.date)
  102. }
  103. @IBAction func register(_ sender: UIButton) {
  104. let email = self.emailTextField.text!
  105. // let password = self.passwordTextField.text!
  106. let password = self.password
  107. let dob = self.dobTextField.text!
  108. let confirmPassword = self.confirmPasswordTextfield.text!
  109. let model = RegisterRequestModel()
  110. model.username = email
  111. model.password = password
  112. model.encryptedConfirmPassword = self.encryptedConfirmPassword
  113. model.confirmPassword = confirmPassword
  114. model.dob = dob
  115. model.encryptedPassword = self.encryptedPassword
  116. self.presenter?.register(model: model)
  117. }
  118. // MARK: Other Functions
  119. func setupKeyboard() {
  120. isShowNumber = false
  121. isShowQwerty = true
  122. isTranskeyShowing = false
  123. setQwertyTranskey()
  124. // self.showQwertyTranskeyAction()
  125. }
  126. func setQwertyTranskey(){
  127. mQwertyTransKeyView = TransKeyView()
  128. mQwertyTransKeyView?.mTK_Init(self)
  129. mQwertyTransKeyView?.delegate = self
  130. mQwertyTransKeyView?.mTK_MakeSecureKey()
  131. mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortrait)
  132. mQwertyTransKeyView?.mTK_EnableSamekeyInputDataEncrypt(false)
  133. // ccr key
  134. mQwertyTransKeyView?.mTK_LicenseCheck("license_IBK_TEST_IONEBANK_20181105_20190531")
  135. }
  136. private func setup() {
  137. // all setup should be done here
  138. self.setupPicturedNavBar()
  139. self.setupDatePicker()
  140. self.configureLanguage()
  141. self.passwordTextField.delegate = self
  142. self.confirmPasswordTextfield.delegate = self
  143. }
  144. private func configureLanguage() {
  145. self.headerLabel.text = StringConstants().registerHeader
  146. self.subHeaderLabel.text = StringConstants().registerSubtitle
  147. self.userIdTitleLabel.text = "email_text".localized()
  148. self.emailTextField.placeholder = StringConstants().useridPlaceholder
  149. let passwordPlaceholder = StringConstants().passwordPlaceholder
  150. let attributedPasswordPlaceholder = NSMutableAttributedString(string: passwordPlaceholder)
  151. let passwordPolicy = " (\("password_policy_error".localized()))"
  152. let font = UIFont.init(name: "SanFranciscoDisplay-regular", size: 12)!
  153. let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font : font ]
  154. let attributedPasswordPolicy = NSAttributedString(string: passwordPolicy, attributes: myAttribute)
  155. attributedPasswordPlaceholder.append(attributedPasswordPolicy)
  156. self.passwordTitleLabel.attributedText = attributedPasswordPlaceholder
  157. self.passwordTextField.placeholder = StringConstants().passwordPlaceholder
  158. self.confirmPasswordTitleLabel.text = StringConstants().confirmPasswordPlaceholder
  159. self.confirmPasswordTextfield.placeholder = StringConstants().confirmPasswordPlaceholder
  160. self.dobTitileLabel.text = StringConstants().dobTitlePlaceholder
  161. self.dobTextField.placeholder = StringConstants().dobTitlePlaceholder
  162. self.alreadyHaveAccountLabel.text = StringConstants().alreadyHaveAccountText
  163. self.loginButton.setTitle(StringConstants().loginText, for: .normal)
  164. self.registerButton.setTitle(StringConstants().registerText, for: .normal)
  165. }
  166. }
  167. // MARK: RegisterViewInterface
  168. extension RegisterViewController: RegisterViewInterface {
  169. func showLoading() {
  170. self.showProgressHud()
  171. }
  172. func hideLoading() {
  173. self.hideProgressHud()
  174. }
  175. func show(error: String) {
  176. self.alert(message: error)
  177. }
  178. func show(message: String) {
  179. self.alertWithOk(message: message, title: "Success", okTitle: "Ok") {
  180. self.presenter?.login()
  181. }
  182. }
  183. }
  184. extension RegisterViewController: TransKeyViewDelegate {
  185. func secureInputFinish(_ type: Int) {
  186. NSLog("secureInputFinish Btn Type : %d", type)
  187. NSLog("secureInputFinish");
  188. var targetView : TransKeyView?
  189. NSLog("qwerty : " + isShowQwerty.description + " number : " + isShowNumber.description)
  190. if isShowQwerty == true{
  191. qwertyCipherString = mQwertyTransKeyView?.mTK_GetSecureData()
  192. if showingPasswordField {
  193. if mQwertyTransKeyView?.mTK_GetDataLength() == 0 {
  194. self.encryptedPassword = ""
  195. self.passwordTextField.text = ""
  196. }else {
  197. self.encryptedPassword = qwertyCipherString
  198. self.passwordTextField.text = "password"
  199. } }
  200. if showingConfirmPasswordField {
  201. if mQwertyTransKeyView?.mTK_GetDataLength() == 0 {
  202. encryptedConfirmPassword = ""
  203. self.confirmPasswordTextfield.text = ""
  204. }else {
  205. encryptedConfirmPassword = qwertyCipherString
  206. self.confirmPasswordTextfield.text = "password"
  207. }
  208. }
  209. targetView = mQwertyTransKeyView
  210. // self.mQwertyTransKeyView?.dismissViewControllerAnimated(true, completion: nil)
  211. }
  212. isShowQwerty = false
  213. isShowNumber = false
  214. isTranskeyShowing = false
  215. targetView?.dismiss(animated: true, completion: nil)
  216. }
  217. func showQwertyPasswordTranskeyAction(){
  218. // let pbkdfKey = "acc4af609fad57f1cd870a5d94092a24be5fd974"
  219. //// let salts = { 1, 6, 0, 7, 4, 4, 4, 4, 8, 8, 7, 1, 4, 3, 3, 3, 3, 3, 3, 3}
  220. // var PBKDF2_SALT : NSData!
  221. // let PBKDF2_IT = 512;
  222. // mQwertyTransKeyView?.mTK_SetPBKDF_RandKey(<#T##randkey: NSData!##NSData!#>)
  223. // setQwertyTranskey()
  224. if mQwertyTransKeyView?.isBeingPresented == false {
  225. isShowQwerty = true
  226. isTranskeyShowing = true
  227. let hintStr = String(format:"password", 0)
  228. let font = UIFont(name: "Arial", size: 15)
  229. mQwertyTransKeyView?.mTK_SetHint(hintStr, font: font)
  230. mQwertyTransKeyView?.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.")
  231. mQwertyTransKeyView?.mTK_UseCursor(true)
  232. mQwertyTransKeyView?.mTK_UseAllDeleteButton(true)
  233. mQwertyTransKeyView?.mTK_UseNavigationBar(true)
  234. mQwertyTransKeyView?.mTK_UseVoiceOver(true)
  235. mQwertyTransKeyView?.mTK_setHideInputPasswordDelay(3)
  236. mQwertyTransKeyView?.mTK_SetControlCenter(false)
  237. mQwertyTransKeyView?.mTK_setIgnoreStatusbar(false)
  238. // mQwertyTransKeyView?.mTK_SetLanguage(1)
  239. mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
  240. mQwertyTransKeyView?.mTK_UseShiftOptional(true)
  241. mQwertyTransKeyView?.setKeyboardType(self,
  242. keypadType: 0,
  243. mTK_inputType: 2,
  244. mTK_inputTitle: "password",
  245. mTK_cryptType: 0,
  246. mTK_maxLength: 100,
  247. mTK_minLength: 0,
  248. mTK_keypadUpper: false,
  249. mTK_languageType: 1)
  250. mQwertyTransKeyView?.mTK_EnableSamekeyInputDataEncrypt(false)
  251. mQwertyTransKeyView?.mTK_SetUseBalloonImageButton(true)
  252. if let mQwertyTransKeyView = mQwertyTransKeyView {
  253. self.present(mQwertyTransKeyView, animated: true, completion: nil)
  254. }
  255. }
  256. }
  257. }
  258. extension RegisterViewController: UITextFieldDelegate {
  259. func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
  260. if textField == passwordTextField {
  261. self.showingPasswordField = true
  262. self.showingConfirmPasswordField = false
  263. self.showQwertyPasswordTranskeyAction()
  264. return false
  265. }
  266. if textField == confirmPasswordTextfield {
  267. self.showingConfirmPasswordField = true
  268. self.showingPasswordField = false
  269. self.showQwertyPasswordTranskeyAction()
  270. return false
  271. }
  272. return true
  273. }
  274. }