Files
yingmeng-ios-switf/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift
2024-02-25 23:11:02 +08:00

127 lines
3.8 KiB
Swift

//
// 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<Bool>()
let token = PublishSubject<UserTokenObject?>()
let loginSuccess = BehaviorSubject(value: false)
let resetPwd = PublishSubject<Bool>()
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<UserTokenObject>.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<UserTokenObject>.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()
}
}
}
///tokenticket
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)
}
}
}