diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index ee0bf0b..f7fca9d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityLoginBinding import com.casic.br.operationsite.extensions.initImmersionBar +import com.casic.br.operationsite.model.PublicKeyModel import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.utils.RSAUtils @@ -78,31 +79,36 @@ } SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) - authenticateViewModel.getPublicKey(this) + authenticateViewModel.getPublicKey( + onLoading = {}, + onSuccess = { startLogin(it) }, + onFailed = { it.show(this) } + ) } - authenticateViewModel.keyModel.observe(this) { - if (it.code == 200) {//用code判断,别的判断可能有坑 - val keyString = it.data!!.publicKey!! - /** - * 修改密码需要用到key,先存着 - * */ - AuthenticationHelper.savePublicKey(keyString) - val publicKey = RSAUtils.keyStrToPublicKey(keyString) + } - val account = binding.userNameView.text.toString() - val userPassword = binding.userPasswordView.text.toString() - val dataByPublicKey = RSAUtils.encryptDataByPublicKey( - userPassword.toByteArray(), publicKey!! - ) - //登录并获取Token,POST请求 - loginViewModel.enter(this, it.data!!.sid!!, account, dataByPublicKey) - loginViewModel.enterResultModel.observe(this) { loginResult -> - if (loginResult.code == 200) { - AuthenticationHelper.saveToken(loginResult.data!!.token!!) - userViewModel.getUserDetail() - navigatePageTo() - finish() - } + private fun startLogin(it: PublicKeyModel) { + it.data?.let { data -> + val keyString = data.publicKey + /** + * 修改密码需要用到key,先存着 + * */ + AuthenticationHelper.savePublicKey(keyString) + val publicKey = RSAUtils.keyStrToPublicKey(keyString) + + val account = binding.userNameView.text.toString() + val userPassword = binding.userPasswordView.text.toString() + val dataByPublicKey = RSAUtils.encryptDataByPublicKey( + userPassword.toByteArray(), publicKey!! + ) + //登录并获取Token,POST请求 + loginViewModel.enter(this, data.sid, account, dataByPublicKey) + loginViewModel.enterResultModel.observe(this) { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) + userViewModel.getUserDetail() + navigatePageTo() + finish() } } } diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index ee0bf0b..f7fca9d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivityLoginBinding import com.casic.br.operationsite.extensions.initImmersionBar +import com.casic.br.operationsite.model.PublicKeyModel import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.LocaleConstant import com.casic.br.operationsite.utils.RSAUtils @@ -78,31 +79,36 @@ } SaveKeyValues.putValue(LocaleConstant.ACCOUNT, account) SaveKeyValues.putValue(LocaleConstant.PASSWORD, userPassword) - authenticateViewModel.getPublicKey(this) + authenticateViewModel.getPublicKey( + onLoading = {}, + onSuccess = { startLogin(it) }, + onFailed = { it.show(this) } + ) } - authenticateViewModel.keyModel.observe(this) { - if (it.code == 200) {//用code判断,别的判断可能有坑 - val keyString = it.data!!.publicKey!! - /** - * 修改密码需要用到key,先存着 - * */ - AuthenticationHelper.savePublicKey(keyString) - val publicKey = RSAUtils.keyStrToPublicKey(keyString) + } - val account = binding.userNameView.text.toString() - val userPassword = binding.userPasswordView.text.toString() - val dataByPublicKey = RSAUtils.encryptDataByPublicKey( - userPassword.toByteArray(), publicKey!! - ) - //登录并获取Token,POST请求 - loginViewModel.enter(this, it.data!!.sid!!, account, dataByPublicKey) - loginViewModel.enterResultModel.observe(this) { loginResult -> - if (loginResult.code == 200) { - AuthenticationHelper.saveToken(loginResult.data!!.token!!) - userViewModel.getUserDetail() - navigatePageTo() - finish() - } + private fun startLogin(it: PublicKeyModel) { + it.data?.let { data -> + val keyString = data.publicKey + /** + * 修改密码需要用到key,先存着 + * */ + AuthenticationHelper.savePublicKey(keyString) + val publicKey = RSAUtils.keyStrToPublicKey(keyString) + + val account = binding.userNameView.text.toString() + val userPassword = binding.userPasswordView.text.toString() + val dataByPublicKey = RSAUtils.encryptDataByPublicKey( + userPassword.toByteArray(), publicKey!! + ) + //登录并获取Token,POST请求 + loginViewModel.enter(this, data.sid, account, dataByPublicKey) + loginViewModel.enterResultModel.observe(this) { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) + userViewModel.getUserDetail() + navigatePageTo() + finish() } } } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt index 1db6a34..26d25e2 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AuthenticateViewModel.kt @@ -1,39 +1,27 @@ package com.casic.br.operationsite.vm -import android.content.Context -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.br.operationsite.extensions.getResponseCode -import com.casic.br.operationsite.extensions.getResponseMessage +import androidx.lifecycle.ViewModel +import com.casic.br.operationsite.extensions.getResponseHeader import com.casic.br.operationsite.model.PublicKeyModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch -import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.RetrofitFactory.kTag +import com.pengxh.kt.lite.extensions.unpackingResponse -class AuthenticateViewModel : BaseViewModel() { - - private val gson = Gson() - val keyModel = MutableLiveData() - - fun getPublicKey(context: Context) = launch({ +class AuthenticateViewModel : ViewModel() { + fun getPublicKey( + onLoading: () -> Unit, + onSuccess: (PublicKeyModel) -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() val response = RetrofitServiceManager.authenticate() - Log.d(kTag, "getPublicKey: $response") - when (response.getResponseCode()) { - 200 -> { - keyModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } - - else -> { - response.getResponseMessage().show(context) - } + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess(unpackingResponse(response)) + } else { + onFailed(header.second) } }, { - it.printStackTrace() + onFailed(it.message ?: "Unknown error") }) } \ No newline at end of file