LoginViewModel.ets 4.27 KB
import { Logger } from 'wdKit/src/main/ets/utils/Logger'
import { LoginModel } from './LoginModel'
import { LoginBean } from './LoginBean'
import { SPHelper } from 'wdKit'
import { CheckVerifyBean } from './CheckVerifyBean'
import cryptoFramework from '@ohos.security.cryptoFramework'
import buffer from '@ohos.buffer'

const TAG = "LoginViewModel"

export class LoginViewModel {
  loginModel: LoginModel

  constructor() {
    this.loginModel = new LoginModel()
  }

  //发送验证码
  sendVerifyCode(number: string) {
    return new Promise<string>((success, fail) => {
      this.loginModel.sendVerifyCode(number).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })

  }

  appLogin(phone: string, loginType: number, verificationCode: string) {

    return new Promise<LoginBean>((success, fail) => {
      this.loginModel.appLogin(phone, loginType, verificationCode).then((data: LoginBean) => {
        //todo 保存登录数据
        SPHelper.default.save("firstMark", data.firstMark)
        SPHelper.default.save("id", data.id)
        SPHelper.default.save("jwtToken", data.jwtToken)
        SPHelper.default.save("longTimeNoLoginMark", data.longTimeNoLoginMark)
        SPHelper.default.save("refreshToken", data.refreshToken)
        SPHelper.default.save("status", data.status)
        SPHelper.default.save("userType", data.userType)
        SPHelper.default.save("userName", data.userName)

        success(data)
      }).catch(() => {
        fail()
      })
    })
  }

  async appLoginByPassword(phone: string, loginType: number, password: string, oldPassword: string) {

    return new Promise<LoginBean>(async (success, fail) => {
      let passwordNew = await this.doMd(password)
      Logger.debug(TAG, "PASSWORD:" + passwordNew)
      this.loginModel.appLoginByPassword(phone, loginType, passwordNew, oldPassword).then((data: LoginBean) => {
        //todo 保存登录数据
        SPHelper.default.save("userName", data.userName)

        success(data)
      }).catch((value: string) => {
        fail(value)
      })
    })
  }

  //{"code":"0","data":{"tempToken":"eyJhbGciOiJIUzI1NiIsImtpZCI6ImQ4WkI2QkhxSEZrdjJ2U25BNlRwZEdKRjBHcjItVzBvS2FaYzdLOUUycmcifQ.eyJpc3MiOiJwZW9wbGVzLWRhaWx5LWZvdXJhIiwic3ViIjoicGVvcGxlcy1kYWlseS1mb3VyYSIsImV4cCI6MTcxMDQ2ODE5NCwidXNlcklkIjpudWxsLCJ1c2VyVmVyc2lvbiI6Im51bGxfbnVsbCIsInVzZXJOYW1lIjpudWxsLCJ1c2VyVHlwZSI6bnVsbCwiY3JlYXRvcklkIjpudWxsLCJ1c2VySWRaaCI6bnVsbH0.R5gv44Gyni3QTxtWvSxYn0eMuUD5_bI1hh9TaThq25g","jwtToken":"eyJhbGciOiJIUzI1NiIsImtpZCI6ImQ4WkI2QkhxSEZrdjJ2U25BNlRwZEdKRjBHcjItVzBvS2FaYzdLOUUycmcifQ.eyJpc3MiOiJwZW9wbGVzLWRhaWx5LWZvdXJhIiwic3ViIjoicGVvcGxlcy1kYWlseS1mb3VyYSIsImV4cCI6MTcxMDY0NzU5NCwidXNlcklkIjo1NjkzNTAwNzk4ODk2NjksInVzZXJWZXJzaW9uIjoiNTY5MzUwMDc5ODg5NjY5XzAiLCJ1c2VyTmFtZSI6IiVFNCVCQSVCQSVFNiVCMCU5MSVFNiU5NyVBNSVFNiU4QSVBNSVFNyVCRCU5MSVFNSU4RiU4QjJrRDJ4VyIsInVzZXJUeXBlIjoxLCJjcmVhdG9ySWQiOm51bGwsInVzZXJJZFpoIjpudWxsfQ.Ai19vg8-rhJNXt2nwFTfir7s01eLfTtOCKcptIpeyG0"},"message":"Success","success":true,"timestamp":1710467595186}
  checkVerifyCode(phone: string, verifyCode: string) {
    return new Promise<CheckVerifyBean>((success, reject) => {
      this.loginModel.checkVerifyCode(phone, verifyCode).then((data: CheckVerifyBean) => {
        //todo 保存数据
        SPHelper.default.save("tempToken", data.temToken)
        SPHelper.default.save("jwtToken", data.jwtToken)
        success(data)

      }, (value: string) => {
        reject(value)
      })
    })
  }


  async doMd(content: string): Promise<string> {
    let mdAlgName = 'SHA256'; // 摘要算法名
    let message = content; // 待摘要的数据
    let md = cryptoFramework.createMd(mdAlgName);
    // 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制
    await md.update({ data: new Uint8Array(buffer.from(message, 'utf-8').buffer) });
    let mdResult = await md.digest();
    console.info('Md result:' + mdResult.data);
    return this.byte2Hex(mdResult.data)
  }

  byte2Hex(data: Uint8Array): string {
    let bufferStr = ''
    for (let i = 0; i < data.length; i++) {
      let temp = data[i].toString(16)
      if (temp.length == 1) {
        temp = "0"+temp
      }
      bufferStr += temp

    }
    console.info('Md result2:' + bufferStr);
    return bufferStr;

  }
}