|
|
// // ProfileChangePasswordViewController.swift // GMERemittance // // Created by Fm-user on 1/9/18. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. //
import UIKit import Localize_Swift
class ProfileChangePasswordViewController: UIViewController { struct StringConstants { let passwordErrorText = "password_policy_text".localized() let newPasswordTitleText = "new_password_text".localized() let currentPasswordTitleText = "current_password_text".localized() let confirmPasswordTitleText = "confirm_password_text".localized() let saveText = "save_text".localized() let titleText = "change_password_title_text".localized() let successText = "success_text".localized() let emptyPasswordError = "password_empty_error".localized() let confirmPasswordError = "password_confirm_empty_error".localized() let passwordLengthError = "password_length_error".localized() let passwordPolicy = "password_policy_error".localized() let passwordMatchError = "password_match_error".localized() } @IBOutlet weak var textFieldCurrentPassword: UITextField! @IBOutlet weak var textFieldNewPassword: UITextField! @IBOutlet weak var textFieldConfirmPassword: UITextField! @IBOutlet weak var topLabel: UILabel! @IBOutlet weak var contentView: UIView! @IBOutlet weak var currentPasswowrdTitleLabel: UILabel! @IBOutlet weak var newPasswordTitleLabel: UILabel! @IBOutlet weak var confirmPasswordTitlelabel: UILabel! @IBOutlet weak var saveButton: UIButton! // MARK: - Properties var mQwertyTransKeyView : TransKeyView? var mNumberTransKeyView : TransKeyView? var secureKey : NSData! var numberCipherString : String! var qwertyCipherString : String! var isTranskeyShowing : Bool! var isShowQwerty : Bool! = true var isShowNumber : Bool! var password: String! { didSet { self.textFieldNewPassword.text = password } } var encryptedPassword: String! var confirmPassword: String! { didSet { self.textFieldConfirmPassword.text = confirmPassword } } var oldPassword: String! { didSet { self.textFieldCurrentPassword.text = oldPassword } } var encryptedOldPassword: String! var encryptedConfirmPassword: String! var showingPasswordField = false var showingConfirmPasswordField: Bool = false var showingOldPasswordField = true // MARK: Life Cycle override func viewDidLoad() { super.viewDidLoad() self.setupNormalNavigation() topLabel.font = .sanfrancisco(.regular, size: 14) topLabel.textColor = UIColor.init(hex: "4a4a4a") self.setupKeyboard() self.textFieldNewPassword.delegate = self self.textFieldConfirmPassword.delegate = self self.textFieldCurrentPassword.delegate = self configureLanguage() saveButton.backgroundColor = .themeRed saveButton.layer.cornerRadius = 5 } override func viewWillAppear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationItem.title = StringConstants().titleText } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationItem.title = "" } func configureLanguage() { self.topLabel.text = "password_policy_text".localized() self.textFieldCurrentPassword.placeholder = "current_password_placeholder_text".localized() self.textFieldNewPassword.placeholder = "new_password_placeholder_text".localized() self.textFieldConfirmPassword.placeholder = "confirm_password_text".localized() self.newPasswordTitleLabel.text = "new_password_text".localized() self.currentPasswowrdTitleLabel.text = "current_password_placeholder_text".localized() self.confirmPasswordTitlelabel.text = "confirm_password_text".localized() self.saveButton.setTitle("save_text".localized(), for: UIControl.State.normal) } @IBAction func savePasswordChanges(_ sender: Any) { let currentPassword = self.encryptedOldPassword ?? "" let newPassword = self.encryptedPassword ?? "" let confirmPassword = self.encryptedConfirmPassword ?? "" let result = self.isValid( currentPassword: currentPassword, password: newPassword, confirmPassword: confirmPassword ) if result.isValid { let userId = Utility.getMyUserName() let param = [ "UserId" : userId, "OldPassword": currentPassword, "NewPassword": newPassword, "ConfirmPassword": confirmPassword // todo: send encrypted password ] self.updatePassword(param: param) } else { let message = result.error self.alert(type: .error, message: message.localizedDescription) } } func updatePassword(param: [String: String]) { self.updatePassword( params: param, success: { (message) in self.alert(message: message, title: StringConstants().successText, okAction: { KeyChain.shared.save(data: self.encryptedPassword, key: .password) self.navigationController?.popViewController(animated: true) }) }, failure: { (error) in self.alert(type: .error, message: error.localizedDescription) } ) } func setupKeyboard() { isShowNumber = false isShowQwerty = true isTranskeyShowing = false let iv: [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") } }
extension ProfileChangePasswordViewController { private func isValidPasword(password: String, confirmPassword: String) -> (isValid: Bool, error: String) { var error = "" var isValid = true if password.isEmpty { error = "\(error)\n\(StringConstants().emptyPasswordError)" isValid = false } if confirmPassword.isEmpty { error = "\(error)\n\(StringConstants().emptyPasswordError)" isValid = false } return (isValid, error) } // MARK: Converting entities private func isValid( currentPassword: String, password: String, confirmPassword: String ) -> (isValid: Bool, error: Error) { var error = "" var isValid = true // user name if currentPassword.isEmpty { error = "\(error)\n\(StringConstants().emptyPasswordError)" isValid = false } let result = self.isValidPasword(password: password, confirmPassword: confirmPassword) if !result.isValid { error = "\(error) \(result.error)" isValid = false } let newError = NSError( domain: "LoginInteractor", code: 0, userInfo: [NSLocalizedDescriptionKey : error] ) return (isValid, newError) } }
extension ProfileChangePasswordViewController: UpdatePasswordService { }
protocol UpdatePasswordService: ApiServiceType { func updatePassword( params: [String: String], success: @escaping (String?) -> Void, failure: @escaping (Error) -> Void ) }
extension UpdatePasswordService { func updatePassword( params: [String: String], success: @escaping (String?) -> Void, failure: @escaping (Error) -> Void ) { let url = baseUrl + "/mobile/ChangePassword" auth.request( method: .post, url: url, params: params, needsAuthorization: true, success: { (response: SuccessMessageContainer) in if (response.errorCode ?? "") == "1" { let error = NSError( domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""] ) failure(error) } else { success(response.data?.message) } }, failure: { (error) in failure(error) } ) } }
extension ProfileChangePasswordViewController: TransKeyViewDelegate { func secureInputFinish(_ type: Int) { var targetView : TransKeyView? NSLog("qwerty : " + isShowQwerty.description + " number : " + isShowNumber.description) if isShowQwerty == true { qwertyCipherString = mQwertyTransKeyView?.mTK_GetSecureData() if showingPasswordField { if mQwertyTransKeyView?.mTK_GetDataLength() == 0 { self.encryptedPassword = "" self.password = "" } else { self.encryptedPassword = qwertyCipherString self.password = "password" } } if showingConfirmPasswordField { if mQwertyTransKeyView?.mTK_GetDataLength() == 0 { confirmPassword = "" self.encryptedConfirmPassword = "" } else { confirmPassword = "password" self.encryptedConfirmPassword = qwertyCipherString } } if showingOldPasswordField { if mQwertyTransKeyView?.mTK_GetDataLength() == 0 { oldPassword = "" encryptedOldPassword = "" } else { oldPassword = "password" encryptedOldPassword = qwertyCipherString } } targetView = mQwertyTransKeyView } isShowQwerty = false isShowNumber = false isTranskeyShowing = false targetView?.dismiss(animated: true, completion: nil) } func showQwertyPasswordTranskeyAction() { 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_UseShiftOptional(true) 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 ProfileChangePasswordViewController: UITextFieldDelegate { func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { if textField == textFieldCurrentPassword { self.showingOldPasswordField = true self.showingConfirmPasswordField = false self.showingPasswordField = false self.showQwertyPasswordTranskeyAction() return false } if textField == textFieldConfirmPassword { self.showingConfirmPasswordField = true self.showingOldPasswordField = false self.showingPasswordField = false self.showQwertyPasswordTranskeyAction() return false } if textField == textFieldNewPassword { self.showingPasswordField = true self.showingConfirmPasswordField = false self.showingOldPasswordField = false self.showQwertyPasswordTranskeyAction() return false } return true } }
|