// // SplashScreenViewModel.swift // LMS // // Created by Suraj Kumar Mandal on 31/08/22. // import Foundation import Alamofire import JWTDecode class SplashScreenViewModel { var delegate: SplashScreenViewProtocol? func getAccessToken() { if let delegate = delegate { let url = ApiURL.AccessToken let email = UserDefaults.standard.value(forKey: "userName") as! String let password = UserDefaults.standard.value(forKey: "password") as! String let parameters: [String: String] = [ "username" : email, "password" : password, "client_id" : AppConstant.ClientId, "client_secret" : AppConstant.ClientSecret, "grant_type" : "password" ] print(parameters) AF.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default) .responseJSON { response in if response.response?.statusCode == 200 { switch response.result { case .success(_): do { // Handle as previously success if let json = response.value { let data = json as! [String:AnyObject] print(data) let accessToken = data["access_token"] as? String let expiresIn = data["expires_in"] as? Int let refreshExpiresIn = data["refresh_expires_in"] as? Int let refreshToken = data["refresh_token"] as? String let tokenType = data["token_type"] as? String let sessionState = data["session_state"] as? String let scope = data["scope"] as? String let notBeforePolicy = data["not-before-policy"] as? Int print("Access Token: \(accessToken ?? "")") let jwt = try decode(jwt: accessToken!) UserDefaults.standard.set(accessToken, forKey: "accessToken") UserDefaults.standard.set(refreshToken, forKey: "refreshToken") UserDefaults.standard.set(expiresIn, forKey: "tokenExpire") UserDefaults.standard.set(true, forKey: "isLogin") UserDefaults.standard.set(jwt.subject, forKey: "decryptedToken") UserDefaults.standard.synchronize() delegate.navigateToHome() } } catch { print("Error while decoding response: \(error)") } break case .failure(let error): print(error.localizedDescription) break } } } } } func refreshToken() { let url = ApiURL.AccessToken let refreshToken = UserDefaults.standard.value(forKey: "refreshToken") as! String let parameters: [String: String] = [ "refresh_token" : refreshToken, "client_id" : AppConstant.ClientId, "client_secret" : AppConstant.ClientSecret, "grant_type" : "refresh_token" ] print(parameters) AF.request(url, method: .post, parameters: parameters, encoding: URLEncoding.httpBody).responseJSON { (response) in if response.response?.statusCode == 200 { switch response.result { case .success(_): do { if let json = response.value { let data = json as! [String:AnyObject] print(data) let accessToken = data["access_token"] as? String let expiresIn = data["expires_in"] as? Int let refreshExpiresIn = data["refresh_expires_in"] as? Int let refreshToken = data["refresh_token"] as? String let tokenType = data["token_type"] as? String let sessionState = data["session_state"] as? String let scope = data["scope"] as? String let notBeforePolicy = data["not-before-policy"] as? Int print("Access Token: \(accessToken)") let jwt = try decode(jwt: accessToken!) UserDefaults.standard.set(accessToken, forKey: "accessToken") UserDefaults.standard.set(refreshToken, forKey: "refreshToken") UserDefaults.standard.set(jwt.subject, forKey: "decryptedToken") UserDefaults.standard.synchronize() } } catch { print("Error while decoding response: \(error)") } break case .failure(let error): print(error.localizedDescription) break } } } } } protocol SplashScreenViewProtocol { func navigateToHome() }