SplashScreenViewModel.swift 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. //
  2. // SplashScreenViewModel.swift
  3. // LMS
  4. //
  5. // Created by Suraj Kumar Mandal on 31/08/22.
  6. //
  7. import Foundation
  8. import Alamofire
  9. import JWTDecode
  10. class SplashScreenViewModel {
  11. var delegate: SplashScreenViewProtocol?
  12. func getAccessToken() {
  13. if let delegate = delegate {
  14. let url = ApiURL.AccessToken
  15. let email = UserDefaults.standard.value(forKey: "userName") as! String
  16. let password = UserDefaults.standard.value(forKey: "password") as! String
  17. let parameters: [String: String] = [
  18. "username" : email,
  19. "password" : password,
  20. "client_id" : AppConstant.ClientId,
  21. "client_secret" : AppConstant.ClientSecret,
  22. "grant_type" : "password"
  23. ]
  24. print(parameters)
  25. AF.request(url,
  26. method: .post,
  27. parameters: parameters,
  28. encoding: URLEncoding.default)
  29. .responseJSON { response in
  30. if response.response?.statusCode == 200 {
  31. switch response.result {
  32. case .success(_):
  33. do {
  34. // Handle as previously success
  35. if let json = response.value {
  36. let data = json as! [String:AnyObject]
  37. print(data)
  38. let accessToken = data["access_token"] as? String
  39. let expiresIn = data["expires_in"] as? Int
  40. let refreshExpiresIn = data["refresh_expires_in"] as? Int
  41. let refreshToken = data["refresh_token"] as? String
  42. let tokenType = data["token_type"] as? String
  43. let sessionState = data["session_state"] as? String
  44. let scope = data["scope"] as? String
  45. let notBeforePolicy = data["not-before-policy"] as? Int
  46. print("Access Token: \(accessToken ?? "")")
  47. let jwt = try decode(jwt: accessToken!)
  48. UserDefaults.standard.set(accessToken, forKey: "accessToken")
  49. UserDefaults.standard.set(refreshToken, forKey: "refreshToken")
  50. UserDefaults.standard.set(expiresIn, forKey: "tokenExpire")
  51. UserDefaults.standard.set(true, forKey: "isLogin")
  52. UserDefaults.standard.set(jwt.subject, forKey: "decryptedToken")
  53. UserDefaults.standard.synchronize()
  54. delegate.navigateToHome()
  55. }
  56. } catch {
  57. print("Error while decoding response: \(error)")
  58. }
  59. break
  60. case .failure(let error):
  61. print(error.localizedDescription)
  62. break
  63. }
  64. }
  65. }
  66. }
  67. }
  68. func refreshToken() {
  69. let url = ApiURL.AccessToken
  70. let refreshToken = UserDefaults.standard.value(forKey: "refreshToken") as! String
  71. let parameters: [String: String] = [
  72. "refresh_token" : refreshToken,
  73. "client_id" : AppConstant.ClientId,
  74. "client_secret" : AppConstant.ClientSecret,
  75. "grant_type" : "refresh_token"
  76. ]
  77. print(parameters)
  78. AF.request(url, method: .post, parameters: parameters, encoding: URLEncoding.httpBody).responseJSON { (response) in
  79. if response.response?.statusCode == 200 {
  80. switch response.result {
  81. case .success(_):
  82. do {
  83. if let json = response.value {
  84. let data = json as! [String:AnyObject]
  85. print(data)
  86. let accessToken = data["access_token"] as? String
  87. let expiresIn = data["expires_in"] as? Int
  88. let refreshExpiresIn = data["refresh_expires_in"] as? Int
  89. let refreshToken = data["refresh_token"] as? String
  90. let tokenType = data["token_type"] as? String
  91. let sessionState = data["session_state"] as? String
  92. let scope = data["scope"] as? String
  93. let notBeforePolicy = data["not-before-policy"] as? Int
  94. print("Access Token: \(accessToken)")
  95. let jwt = try decode(jwt: accessToken!)
  96. UserDefaults.standard.set(accessToken, forKey: "accessToken")
  97. UserDefaults.standard.set(refreshToken, forKey: "refreshToken")
  98. UserDefaults.standard.set(jwt.subject, forKey: "decryptedToken")
  99. UserDefaults.standard.synchronize()
  100. }
  101. } catch {
  102. print("Error while decoding response: \(error)")
  103. }
  104. break
  105. case .failure(let error):
  106. print(error.localizedDescription)
  107. break
  108. }
  109. }
  110. }
  111. }
  112. }
  113. protocol SplashScreenViewProtocol {
  114. func navigateToHome()
  115. }