// // AuthViewModel.swift // yinmeng-ios // // Created by MaiMang on 2024/2/22. // import Foundation import RxSwift class AuthViewModel: NSObject { static let authVM = AuthViewModel.init() let data = PublishSubject() let token = PublishSubject() let loginSuccess = BehaviorSubject(value: false) let resetPwd = PublishSubject() func appClientConfig() { RequestGet(path: "client/init", parma: [:]) { data in } fail: { code, message in } } ///获取验证码 func getSmsCode(phone:String, type:Int) { if let phoneDes = phone.encrypt() { let params:[String: Any] = ["mobile":phoneDes, "type":type] RequestPost(path: "sms/getCode", parma: params) { data in self.data.onNext(true) } fail: { code, message in self.data.onNext(true) } } } ///账号密码登录 func authPhoneCode(phone:String, code:String) { if let phoneDes = phone.encrypt() { let params = ["phone":phoneDes, "code":code, "client_secret":"uyzjdhds", "version":"1", "client_id":"erban-client", "grant_type":"password"] RequestPost(path: "oauth/token", parma: params) { data in if let account = Deserialized.toModel(with: data) { LoginTokenConfig.config.saveTokenToLocaltion(token: account) self.token.onNext(account) self.token.onCompleted() ///进行token的置换 if let accessToken = account.access_token { self.tokenTransformTicket(accesToken: accessToken) } } } fail: { code, data in self.token.onNext(nil) self.token.onCompleted() } } } ///ID登录 func authIDPassword(account:String, password: String) { if let phoneDes = account.encrypt(), let pwdDes = password.encrypt() { let params = ["phone":phoneDes, "password":pwdDes, "client_secret":"uyzjdhds", "version":"1", "client_id":"erban-client", "grant_type":"password"] RequestPost(path: "oauth/token", parma: params) { data in if let account = Deserialized.toModel(with: data) { LoginTokenConfig.config.saveTokenToLocaltion(token: account) self.token.onNext(account) self.token.onCompleted() ///进行token的置换 if let accessToken = account.access_token { self.tokenTransformTicket(accesToken: accessToken) } } } fail: { code, data in self.token.onNext(nil) self.token.onCompleted() } } } ///通过token获取ticket func tokenTransformTicket(accesToken:String) { let params = ["access_token": accesToken, "issue_type": "multi"] RequestPost(path: "oauth/ticket", parma: params) { data in ///登录成功 if let dic = data as? [String: Any], let tickets = dic["tickets"] as? [[String: Any]], let ticket1 = tickets[safe: 0], let ticket = ticket1["ticket"] as? String{ LoginTokenConfig.config.saveTicketToLoaction(ticket: ticket) self.loginSuccess.onNext(true) self.loginSuccess.onCompleted() } else { self.loginSuccess.onNext(false) self.loginSuccess.onCompleted() } } fail: { code, message in self.loginSuccess.onNext(false) self.loginSuccess.onCompleted() } } ///充值密码 func resetPassword(phone:String, newPwd:String, smsCode:String) { if let phoneDes = phone.encrypt(), let pwdDes = newPwd.encrypt() { let params = ["phone":phoneDes, "newPwd":pwdDes, "smsCode": smsCode] RequestPost(path: "acc/pwd/reset", parma: params) { data in self.resetPwd.onNext(true) } fail: { code, message in self.resetPwd.onNext(false) } } } func checkUserIsLogin() { if let account = LoginTokenConfig.config.getAccountInfo(), let token = account.access_token { let ticket = AuthManager.ticket if ticket.count > 0 { ///如果内容都有的话 就是直接登录 self.loginSuccess.onNext(true) } else { /// 如果没有ticket的话 去置换ticket tokenTransformTicket(accesToken: token) } } else { self.loginSuccess.onNext(false) } } }