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.

80 lines
2.2 KiB

6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // LoginInteractor.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 07/09/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. class LoginInteractor {
  10. // MARK: Properties
  11. weak var output: LoginInteractorOutput?
  12. private let service: LoginServiceType
  13. // MARK: Initialization
  14. init(service: LoginServiceType) {
  15. self.service = service
  16. }
  17. func toBase64(text: String) -> String? {
  18. guard let data = text.data(using: String.Encoding.utf8) else {
  19. return nil
  20. }
  21. return data.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0))
  22. }
  23. private func isValid(userName: String, password: String) -> (isValid: Bool, error: Error){
  24. var error = ""
  25. var isValid = true
  26. if userName.isEmpty {
  27. error = error + "Username field is required.";
  28. isValid = false
  29. }
  30. if password.isEmpty {error = error + "\n Password filed is required.";
  31. isValid = false
  32. }
  33. let _error = NSError.init(domain: "LoginInteractor", code: 0, userInfo: [NSLocalizedDescriptionKey : error])
  34. return (isValid, _error)
  35. }
  36. // MARK: Converting entities
  37. }
  38. // MARK: Login interactor input interface
  39. extension LoginInteractor: LoginInteractorInput {
  40. func login(username: String, password: String) {
  41. let validationResult = self.isValid(userName: username, password: password)
  42. if !validationResult.isValid {
  43. self.output?.show(error: validationResult.error)
  44. return
  45. }
  46. guard let passwordBase64Data = self.toBase64(text: password) else {
  47. return
  48. }
  49. print("password converted is")
  50. print(passwordBase64Data)
  51. self.service._login(userId: username, password: password, success: { (user) in
  52. let accessCode = user?.accessCode ?? ""
  53. let accessCodeBase64 = accessCode
  54. Utility.save(user: user, accessCodeBase64: accessCodeBase64, password: password, login: true)
  55. self.output?.loggedIn()
  56. }) { (error) in
  57. self.output?.show(error: error)
  58. }
  59. }
  60. }