123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- //
- // ChangeDeviceViewController.swift
- // NexilisLite
- //
- // Created by Qindi on 23/03/22.
- //
- import UIKit
- import NotificationBannerSwift
- import nuSDKService
- public class ChangeDeviceViewController: UIViewController {
- @IBOutlet weak var usernameField: UITextField!
- @IBOutlet weak var passwordField: PasswordTextField!
- @IBOutlet weak var showPasswordButton: UIButton!
- @IBOutlet weak var descLogin: UILabel!
-
- public var isDismiss: ((String) -> ())?
- public var forceLogin = false
- public var fromChangeNamePass = false
-
- public override func viewDidLoad() {
- super.viewDidLoad()
-
- self.view.backgroundColor = .white
- self.title = "Sign-In".localized()
- descLogin.text = "Please enter your registered nickname or email address to Sign-In".localized()
- navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Submit".localized(), style: .plain, target: self, action: #selector(didTapSubmit(sender:)))
-
- passwordField.addPadding(.right(40))
- passwordField.isSecureTextEntry = true
- showPasswordButton.setImage(UIImage(systemName: "eye.slash.fill"), for: .normal)
- usernameField.placeholder = "Your Nickname".localized() + "/" + "Email".localized()
- passwordField.placeholder = "Password".localized()
- usernameField.addTarget(self, action: #selector(checkUsername(_:)), for: .editingChanged)
-
- showPasswordButton.addTarget(self, action: #selector(showPassword), for: .touchUpInside)
-
- let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
- tapGesture.cancelsTouchesInView = false
- view.addGestureRecognizer(tapGesture)
- }
-
- @objc func checkUsername(_ textField: UITextField) {
- let text : String! = usernameField.text
- if isValidEmail(text) {
- passwordField.isHidden = true
- showPasswordButton.isHidden = true
- } else if passwordField.isHidden {
- passwordField.isHidden = false
- showPasswordButton.isHidden = false
- }
- }
-
- func isValidEmail(_ email: String) -> Bool {
- let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
- let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
- return emailPred.evaluate(with: email)
- }
-
- @objc func dismissKeyboard() {
- //Causes the view (or one of its embedded text fields) to resign the first responder status.
- view.endEditing(true)
- }
-
- @objc func showPassword() {
- if passwordField.isSecureTextEntry {
- passwordField.isSecureTextEntry = false
- showPasswordButton.setImage(UIImage(systemName: "eye.fill"), for: .normal)
- } else {
- passwordField.isSecureTextEntry = true
- showPasswordButton.setImage(UIImage(systemName: "eye.slash.fill"), for: .normal)
- }
- }
-
- func checkEmail(email: String) {
- if !CheckConnection.isConnectedToNetwork() || API.nGetCLXConnState() == 0 {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Check your connection".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- return
- }
- Nexilis.showLoader()
- DispatchQueue.global().async {
- if let response = Nexilis.writeSync(message: CoreMessage_TMessageBank.getSendOTPLogin(p_email: email), timeout: 30 * 1000) {
- if response.getBody(key: CoreMessage_TMessageKey.ERRCOD, default_value: "99") != "00" {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Unregistered email account".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- })
- }
- } else {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- self.showPageOTP(email: email)
- })
- }
- }
- } else {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Unable to access servers. Try again later".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- })
- }
- }
- }
- }
-
- func showPageOTP(email: String, errCode:String = "") {
- let showOTPVC = VerifyEmail()
- showOTPVC.email = email
- showOTPVC.showWrongOTP = errCode
- showOTPVC.isDismiss = { code in
- Nexilis.showLoader()
- DispatchQueue.global().async {
- if let response = Nexilis.writeSync(message: CoreMessage_TMessageBank.getSendVerifyChangeDevice(p_email: email, p_vercode: code), timeout: 30 * 1000) {
- if !response.isOk() {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- self.showPageOTP(email: email, errCode: response.getBody(key: CoreMessage_TMessageKey.ERRCOD, default_value: "99"))
- })
- }
- } else {
- self.deleteAllRecordDatabase()
- let id = response.getBody(key: CoreMessage_TMessageKey.F_PIN, default_value: "")
- let thumb = response.getBody(key: CoreMessage_TMessageKey.THUMB_ID, default_value: "")
- if(!id.isEmpty) {
- Nexilis.changeUser(f_pin: id)
- Utils.setProfile(value: true)
- UserDefaults.standard.synchronize()
- // pos registration
- _ = Nexilis.write(message: CoreMessage_TMessageBank.getPostRegistration(p_pin: id))
- DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "checkmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Successfully Sign-In".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .success, colors: nil, iconPosition: .center)
- banner.show()
- if self.fromChangeNamePass{
- var vc = self.navigationController?.presentingViewController
- while vc?.presentingViewController != nil {
- vc = vc?.presentingViewController
- }
- vc?.dismiss(animated: true, completion: nil)
- }
- else if !self.forceLogin {
- self.navigationController?.popViewController(animated: true)
- } else {
- self.navigationController?.dismiss(animated: true)
- }
- self.isDismiss?(thumb)
- })
- })
- }
- }
- } else {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Unable to access servers. Try again later".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- })
- }
- }
- }
- }
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
- self.navigationController?.present(showOTPVC, animated: true, completion: nil)
- })
- }
-
- @objc func didTapSubmit(sender: Any) {
- guard let name = usernameField.text, !name.isEmpty else {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Username can't be empty".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- return
- }
- if isValidEmail(name) {
- checkEmail(email: name)
- return
- }
- if !name.matches("^[a-zA-Z ]*$") {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Contains prohibited characters. Only alphabetic characters are allowed.".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- return
- }
- guard let password = passwordField.text, !password.isEmpty else {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Password can't be empty".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- return
- }
- if password.count < 6 {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Password min 6 character".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- return
- }
- if !CheckConnection.isConnectedToNetwork() || API.nGetCLXConnState() == 0 {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Check your connection".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- return
- }
- Nexilis.showLoader()
- DispatchQueue.global().async {
- let md5Hex = Utils.getMD5(string: password).map { String(format: "%02hhx", $0) }.joined()
- if let response = Nexilis.writeSync(message: CoreMessage_TMessageBank.getSignIn(p_name: name, p_password: md5Hex), timeout: 30 * 1000) {
- if response.getBody(key: CoreMessage_TMessageKey.ERRCOD, default_value: "99") == "11" {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Invalid user / Username and password does not match".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- })
- }
- } else if !response.isOk() {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Unable to access servers. Try again later".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- })
- }
- } else {
- self.deleteAllRecordDatabase()
- let id = response.getBody(key: CoreMessage_TMessageKey.F_PIN, default_value: "")
- let thumb = response.getBody(key: CoreMessage_TMessageKey.THUMB_ID, default_value: "")
- if(!id.isEmpty) {
- Nexilis.changeUser(f_pin: id)
- Utils.setProfile(value: true)
- UserDefaults.standard.synchronize()
- // pos registration
- _ = Nexilis.write(message: CoreMessage_TMessageBank.getPostRegistration(p_pin: id))
- DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "checkmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Successfully Sign-In".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .success, colors: nil, iconPosition: .center)
- banner.show()
- if self.fromChangeNamePass{
- var vc = self.navigationController?.presentingViewController
- while vc?.presentingViewController != nil {
- vc = vc?.presentingViewController
- }
- vc?.dismiss(animated: true, completion: nil)
- }
- else if !self.forceLogin {
- self.navigationController?.popViewController(animated: true)
- } else {
- self.navigationController?.dismiss(animated: true)
- }
- self.isDismiss?(thumb)
- })
- })
- }
- }
- } else {
- DispatchQueue.main.async {
- Nexilis.hideLoader(completion: {
- let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
- imageView.tintColor = .white
- let banner = FloatingNotificationBanner(title: "Unable to access servers. Try again later".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
- banner.show()
- })
- }
- }
- }
- }
- }
|