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.

93 lines
3.2 KiB

6 years ago
  1. //
  2. // ChangePasswordViewModel.swift
  3. // GMERemittance
  4. //
  5. // Created by Sujal on 2/18/18.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. class ChangePasswordViewModel: SignUpViewModel {
  10. var passwordChanged: Box<Bool?> = Box(nil)
  11. var oldPassword: String!
  12. var newPassword: String!
  13. var confirmPassword: String!
  14. var passwordConnectionTimeOut: Box<Bool?> = Box(nil)
  15. }
  16. extension ChangePasswordViewModel {
  17. /**
  18. to update old password
  19. */
  20. func updateOldPassword(inputString: String) {
  21. self.oldPassword = inputString
  22. }
  23. /**
  24. to update new password
  25. */
  26. func updateNewPassword(inputString: String) {
  27. self.newPassword = inputString
  28. }
  29. /**
  30. to confrim new password
  31. */
  32. func updateConfirmPassword(inputString: String) {
  33. self.confirmPassword = inputString
  34. }
  35. /**
  36. to validate empty textfield
  37. */
  38. func validateFields() -> isValid {
  39. guard oldPassword != nil && newPassword != nil && confirmPassword != nil else {
  40. return .InValid("Please fill all the fields")
  41. }
  42. guard isValidPasswordLength(password: oldPassword) && isValidPasswordLength(password: newPassword) && isValidPasswordLength(password: confirmPassword) else {
  43. return .InValid("Password lengths do not match the minimum criteria")
  44. }
  45. guard confirmPassword == newPassword else {
  46. return .InValid("Passwords do not match")
  47. }
  48. return .Valid
  49. }
  50. /**
  51. Api request to change password
  52. */
  53. func requestPasswordChanges() {
  54. let userId: String = UserDefaults.standard.object(forKey: "com.gmeremit.username") as! String
  55. if !Reachability.isConnectedToNetwork() {
  56. self.internetConnection.value = false
  57. } else {
  58. RestApiMananger.sharedInstance.changePassword(userId: userId, currentPassword: oldPassword, newPassword: newPassword) { result in
  59. switch result {
  60. case .success(_):
  61. UserDefaults.standard.set(self.newPassword.toBase64(), forKey: "com.gmeremit.password")
  62. self.passwordChanged.value = true
  63. case let .failure(errorJSON):
  64. self.setErrorMessage(message: errorJSON["message"].stringValue)
  65. self.passwordChanged.value = false
  66. case .updateAccessCode:
  67. RestApiMananger.sharedInstance.updateAccessCode(userId: userId, password: self.password!) {
  68. result in
  69. if result != "Error"{
  70. let uuid = RestApiMananger.sharedInstance.getUUID()
  71. UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
  72. self.requestPasswordChanges()
  73. }
  74. }
  75. case .logOutUser():
  76. RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
  77. self.anotherLogin.value = true
  78. case .timeOut:
  79. self.passwordConnectionTimeOut.value = false
  80. }
  81. }
  82. }
  83. }
  84. }