[6.3.0] add func of security down load and add caller
This commit is contained in:
@@ -52,7 +52,7 @@ dependencies {
|
||||
implementation project(":test:crashreport")
|
||||
implementation project(':foudations:mogo-commons')
|
||||
|
||||
// implementation rootProject.ext.dependencies.passport_secret
|
||||
implementation rootProject.ext.dependencies.passport_secret
|
||||
}
|
||||
|
||||
apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
|
||||
|
||||
@@ -21,8 +21,6 @@ import com.mogo.commons.storage.SharedPrefsMgr
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_CLOUD_INIT
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_CLOUD_PASSPORT_AUTH_FAILED
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_CLOUD_PASSPORT_AUTH_OK
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_CLOUD_PASSPORT_TOKEN
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_CLOUD_RECONNECT
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_HTTP_DNS_ERROR_REASON
|
||||
@@ -30,12 +28,12 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_SOURCE_
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_STATUS
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
|
||||
import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.function.call.cloud.CallerCloudCertManager
|
||||
import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.function.startup.stageone.secret.IPassportSecret
|
||||
import com.mogo.eagle.core.function.startup.stageone.secret.PassPortSecret
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAIN
|
||||
import com.mogo.eagle.core.utilcode.util.AppUtils
|
||||
@@ -47,7 +45,7 @@ import com.rousetime.android_startup.AndroidStartup
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
class HttpDnsStartUp : AndroidStartup<Boolean>(), IMoGoCloudListener {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "HttpDnsStartUp"
|
||||
@@ -108,6 +106,8 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
}
|
||||
|
||||
private fun preparePassportEnvironment() {
|
||||
//监听cert文件下载
|
||||
CallerCloudListenerManager.addListener(TAG,this)
|
||||
// 设置网络环境:HTTP_DNS_ENV_QA、HTTP_DNS_ENV_RELEASE、HTTP_DNS_ENV_DEV
|
||||
when (DebugConfig.getNetMode()) {
|
||||
DebugConfig.NET_MODE_DEV -> clientConfig.netMode =
|
||||
@@ -229,8 +229,8 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
if (!gotToken) {
|
||||
CallerLogger.d("$M_MAIN$TAG", "onTokenGot token : $token , sn :$sn")
|
||||
CallerCloudListenerManager.invokeCloudTokenGot(token, sn)
|
||||
// 异步初始化NetConfig
|
||||
asyncInit(sn)
|
||||
// 开启cert download && 异步初始化NetConfig
|
||||
asyncInit()
|
||||
startSocketService(sn)
|
||||
// 开启每5s/次定位上报
|
||||
uploadLocPerFiveSecond()
|
||||
@@ -248,7 +248,11 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
/**
|
||||
* 异步初始化
|
||||
*/
|
||||
private fun asyncInit(sn: String) {
|
||||
private fun asyncInit() {
|
||||
// cert file下载
|
||||
CallerCloudCertManager.certFileDownLoad{
|
||||
logError(getPrReason("PassPortSecret-onFailed , $it"))
|
||||
}
|
||||
ThreadPoolService.execute {
|
||||
// 初始化网络配置
|
||||
NetConfigUtils.init()
|
||||
@@ -259,65 +263,13 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
mStartParams["app_flavor"] = DebugConfig.getProductFlavor()
|
||||
mStartParams["app_identity_mode"] = FunctionBuildConfig.appIdentityMode
|
||||
MogoAnalyticUtils.track("app_start_time", mStartParams)
|
||||
}
|
||||
}
|
||||
|
||||
if (FunctionBuildConfig.isSecure) {
|
||||
context?.let {
|
||||
val authStatus =
|
||||
SharedPrefsMgr.getInstance()
|
||||
.getBoolean("securityKeyStatus-${DebugConfig.getNetMode()}", false)
|
||||
if (authStatus) {
|
||||
// clientConfig设置auth值,并带入header
|
||||
clientConfig.authPubKey = SharedPrefsMgr.getInstance()
|
||||
.getString("securityKey-${DebugConfig.getNetMode()}", "")
|
||||
return@let
|
||||
}
|
||||
// 安全校验
|
||||
try {
|
||||
PassPortSecret.getInstance().init(sn, it.filesDir.path, object :
|
||||
IPassportSecret {
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_TYPE_STATUS,
|
||||
linkCode = CHAIN_SOURCE_CLOUD,
|
||||
nodeAliasCode = CHAIN_CODE_CLOUD_PASSPORT_AUTH_OK,
|
||||
paramIndexes = [0,1]
|
||||
)
|
||||
override fun onSuccess(securityKey: String, rootKey: String) {
|
||||
CallerLogger.d(
|
||||
"$M_MAIN$TAG",
|
||||
"onSuccess securityKey:$securityKey , thread:${Thread.currentThread().name}"
|
||||
)
|
||||
clientConfig.securityKey = securityKey
|
||||
SharedPrefsMgr.getInstance()
|
||||
.putString(
|
||||
"securityKey-${DebugConfig.getNetMode()}",
|
||||
securityKey
|
||||
)
|
||||
SharedPrefsMgr.getInstance()
|
||||
.putBoolean("securityKeyStatus-${DebugConfig.getNetMode()}", true)
|
||||
CallerCloudListenerManager.invokeCloudCrtFile(securityKey, rootKey)
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_TYPE_STATUS,
|
||||
linkCode = CHAIN_SOURCE_CLOUD,
|
||||
nodeAliasCode = CHAIN_CODE_CLOUD_PASSPORT_AUTH_FAILED,
|
||||
paramIndexes = [0, 1]
|
||||
)
|
||||
override fun onFailed(errorCode: Int, errorMsg: String) {
|
||||
logError(
|
||||
getPrReason(
|
||||
"PassPortSecret-onFailed , errorCode:$errorCode,errorMsg:$errorMsg"
|
||||
)
|
||||
)
|
||||
}
|
||||
})
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun authCrtFile(device: String, root: String) {
|
||||
super.authCrtFile(device, root)
|
||||
handler.post {
|
||||
clientConfig.securityKey = device
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
package com.mogo.eagle.core.function.startup.stageone.secret
|
||||
|
||||
import android.content.Context
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.commons.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.function.api.cloud.IMoGoCertProvider
|
||||
import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadPoolService
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
|
||||
@Route(path = MogoServicePaths.PATH_CERT_DOWN_LOAD_PROVIDER)
|
||||
class CertFileManager : IMoGoCertProvider {
|
||||
|
||||
private var context: Context? = null
|
||||
private val securityKeyTAG = "securityKey-${DebugConfig.getNetMode()}"
|
||||
private val securityRootTAG = "securityRoot-${DebugConfig.getNetMode()}"
|
||||
private val securityKeyStatus = "securityKeyStatus-${DebugConfig.getNetMode()}"
|
||||
private val certStatus = AtomicBoolean(false)
|
||||
|
||||
@Volatile
|
||||
private var deviceCrtFile: String? = null
|
||||
|
||||
@Volatile
|
||||
private var rootCrtFile: String? = null
|
||||
|
||||
companion object {
|
||||
private const val TAG = "CertFileManager"
|
||||
}
|
||||
|
||||
override fun init(context: Context?) {
|
||||
this.context = context
|
||||
}
|
||||
|
||||
override fun certificateDownLoad(onError: ((String) -> Unit)?) {
|
||||
if (FunctionBuildConfig.isSecure) {
|
||||
context?.let {
|
||||
val authStatus = SharedPrefsMgr.getInstance().getBoolean(securityKeyStatus, false)
|
||||
if (authStatus) {
|
||||
deviceCrtFile = SharedPrefsMgr.getInstance().getString(securityKeyTAG, "")
|
||||
rootCrtFile = SharedPrefsMgr.getInstance().getString(securityRootTAG, "")
|
||||
CallerCloudListenerManager.invokeCloudCrtFile(deviceCrtFile!!, rootCrtFile!!)
|
||||
return@let
|
||||
}
|
||||
if (certStatus.get()) {
|
||||
onError?.invoke("正在下载证书,请稍后再试")
|
||||
return@let
|
||||
}
|
||||
// 安全校验
|
||||
try {
|
||||
ThreadPoolService.execute {
|
||||
PassPortSecret.getInstance()
|
||||
.init(SharedPrefsMgr.getInstance().sn, it.filesDir.path, object :
|
||||
IPassportSecret {
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = ChainConstant.CHAIN_TYPE_STATUS,
|
||||
linkCode = ChainConstant.CHAIN_SOURCE_CLOUD,
|
||||
nodeAliasCode = ChainConstant.CHAIN_CODE_CLOUD_PASSPORT_AUTH_OK,
|
||||
paramIndexes = [0, 1]
|
||||
)
|
||||
override fun onSuccess(securityKey: String, rootKey: String) {
|
||||
CallerLogger.d(
|
||||
"${SceneConstant.M_D_C}$TAG",
|
||||
"onSuccess securityKey:$securityKey , thread:${Thread.currentThread().name}"
|
||||
)
|
||||
certStatus.set(true)
|
||||
deviceCrtFile = securityKey
|
||||
rootCrtFile = rootKey
|
||||
SharedPrefsMgr.getInstance().putString(securityKeyTAG, securityKey)
|
||||
SharedPrefsMgr.getInstance().putString(securityRootTAG, rootKey)
|
||||
SharedPrefsMgr.getInstance().putBoolean(securityKeyStatus, true)
|
||||
CallerCloudListenerManager.invokeCloudCrtFile(
|
||||
securityKey,
|
||||
rootKey
|
||||
)
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = ChainConstant.CHAIN_TYPE_STATUS,
|
||||
linkCode = ChainConstant.CHAIN_SOURCE_CLOUD,
|
||||
nodeAliasCode = ChainConstant.CHAIN_CODE_CLOUD_PASSPORT_AUTH_FAILED,
|
||||
paramIndexes = [0, 1]
|
||||
)
|
||||
override fun onFailed(errorCode: Int, errorMsg: String) {
|
||||
CallerLogger.d("${SceneConstant.M_D_C}$TAG", "onFailed code:$errorCode, msg:$errorMsg")
|
||||
certStatus.set(true)
|
||||
onError?.invoke("证书下载失败, code:$errorCode, msg:$errorMsg")
|
||||
}
|
||||
})
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
onError?.invoke("当前环境id:${FunctionBuildConfig.urlJson.secureProductId} 不支持密钥下载")
|
||||
}
|
||||
}
|
||||
|
||||
override fun getDeviceCrtF(): String? {
|
||||
return deviceCrtFile?:SharedPrefsMgr.getInstance().getString(securityKeyTAG, "")
|
||||
}
|
||||
|
||||
override fun getRootCrtF(): String? {
|
||||
return rootCrtFile?:SharedPrefsMgr.getInstance().getString(securityRootTAG, "")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user