diff --git a/config.gradle b/config.gradle index ab9fabe5ab..f1ab548012 100644 --- a/config.gradle +++ b/config.gradle @@ -220,7 +220,10 @@ ext { btrace : "com.bytedance.btrace:rhea-core:2.0.0", mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.6", - log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.6" + log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.6", + + // 安全证书 + passport_secret : "com.zhidaoauto:sdk-java:1.0.4-SNAPSHOT" ] android = [ launcherApplicationId : "com.mogo.launcher", diff --git a/core/function-impl/mogo-core-function-startup/build.gradle b/core/function-impl/mogo-core-function-startup/build.gradle index 96f9c83f24..9ac8c3caf2 100644 --- a/core/function-impl/mogo-core-function-startup/build.gradle +++ b/core/function-impl/mogo-core-function-startup/build.gradle @@ -52,6 +52,8 @@ dependencies { implementation project(':core:mogo-core-function-call') implementation project(":test:crashreport") implementation project(':foudations:mogo-commons') + + implementation rootProject.ext.dependencies.passport_secret } apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt index 16b2c06d18..878b316c4f 100644 --- a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt @@ -21,6 +21,8 @@ import com.mogo.commons.network.NetConfigUtils 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 @@ -28,12 +30,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_INIT_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.autopilot.IMoGoChassisLocationWGS84Listener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager 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.mogo.storage.SharedPrefsMgr @@ -218,7 +220,7 @@ class HttpDnsStartUp : AndroidStartup() { CallerLogger.d("$M_MAIN$TAG", "onTokenGot token : $token , sn :$sn") CallerCloudListenerManager.invokeCloudTokenGot(token, sn) // 异步初始化NetConfig - asyncInit() + asyncInit(sn) startSocketService(sn) // 开启每5s/次定位上报 uploadLocPerFiveSecond() @@ -236,9 +238,9 @@ class HttpDnsStartUp : AndroidStartup() { /** * 异步初始化 */ - private fun asyncInit() { + private fun asyncInit(sn: String) { ThreadPoolService.execute { - //初始化网络配置 + // 初始化网络配置 NetConfigUtils.init() // 加入启动统计 val mStartParams: HashMap = HashMap() @@ -247,6 +249,56 @@ class HttpDnsStartUp : AndroidStartup() { mStartParams["app_flavor"] = DebugConfig.getProductFlavor() mStartParams["app_identity_mode"] = FunctionBuildConfig.appIdentityMode MogoAnalyticUtils.track("app_start_time", mStartParams) + + context?.let { + val authStatus = SharedPrefsMgr.getInstance(it).getBoolean("passportAuth", false) + if (authStatus) { + // clientConfig设置auth值,并带入header + clientConfig.authPubKey = SharedPrefsMgr.getInstance(it) + .getString("passportAuthKey", "") + return@let + } + // 安全校验 + try { + PassPortSecret.getInstance().init(sn, it.filesDir.path, object : + IPassportSecret { + + @ChainLog( + linkChainLog = CHAIN_TYPE_INIT_STATUS, + linkCode = CHAIN_SOURCE_CLOUD, + nodeAliasCode = CHAIN_CODE_CLOUD_PASSPORT_AUTH_OK, + paramIndexes = [0] + ) + override fun onSuccess(secretKey: String) { + CallerLogger.d( + "$M_MAIN$TAG", + "onSuccess secretKey:$secretKey , thread:${Thread.currentThread().name}" + ) + clientConfig.authPubKey = secretKey + SharedPrefsMgr.getInstance(it).putString("passportAuthKey", secretKey) + SharedPrefsMgr.getInstance(it).putBoolean("passportAuth", true) + } + + @ChainLog( + linkChainLog = CHAIN_TYPE_INIT_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() + } + } + } } @@ -320,7 +372,7 @@ class HttpDnsStartUp : AndroidStartup() { CallerLogger.e("$M_MAIN$TAG", "pr:$pr") } - //todo 归一处理 + // 归一处理 private fun getPrReason(msg: String): String { val map = hashMapOf() map["lat"] = diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/IPassportSecret.java b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/IPassportSecret.java new file mode 100644 index 0000000000..44b37c09ca --- /dev/null +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/IPassportSecret.java @@ -0,0 +1,8 @@ +package com.mogo.eagle.core.function.startup.stageone.secret; + +public interface IPassportSecret { + + void onSuccess(String secretKey); + + void onFailed(int errorCode, String errorMsg); +} diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/PassPortSecret.java b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/PassPortSecret.java new file mode 100644 index 0000000000..658d3cde33 --- /dev/null +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/secret/PassPortSecret.java @@ -0,0 +1,51 @@ +package com.mogo.eagle.core.function.startup.stageone.secret; + +import constant.ErrorCode; +import domain.Passport; +import service.PassportService; + +public class PassPortSecret { + + private PassPortSecret() { + } + + private static final class Holder { + private static final PassPortSecret secret = new PassPortSecret(); + } + + public static PassPortSecret getInstance() { + return Holder.secret; + } + + private IPassportSecret secretCB; + + public void init(String deviceId, String path, IPassportSecret secretCB) { + if (this.secretCB != null) { + return; + } + this.secretCB = secretCB; + PassportService passportService = new PassportService(); + domain.R r = initLow(passportService, deviceId, path); + if (r.getCode() != ErrorCode.OK.getCode()) { + secretCB.onFailed(r.getCode(), r.getMsg()); + } + Passport passport = (Passport) r.getData(); + domain.R res = passportService.deviceActive(passport); + if (res.getCode() != ErrorCode.OK.getCode()) { + secretCB.onFailed(res.getCode(), res.getMsg()); + } + String secretKey = res.getData(); + secretCB.onSuccess(secretKey); + } + + private static domain.R initLow(PassportService passportService, String deviceId, String path) { + return passportService.init(Passport.builder().type(1) + .deviceActive("http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/active") + .deviceRefresh("http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/refresh") + .deviceAuth("http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/auth") + .productId("10019") + .productSecret("5cbcdc2240fa4104a70f28cdbe5ca69b") + .sn(deviceId) + .certPath(path).build()); + } +} diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt index 1895d2c79c..8538c87724 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt @@ -83,6 +83,8 @@ class ChainConstant { const val CHAIN_CODE_CLOUD_INIT = "CHAIN_CODE_CLOUD_INIT" const val CHAIN_CODE_CLOUD_PASSPORT_TOKEN = "CHAIN_CODE_CLOUD_PASSPORT_TOKEN" + const val CHAIN_CODE_CLOUD_PASSPORT_AUTH_OK = "CHAIN_CODE_CLOUD_PASSPORT_AUTH_OK" + const val CHAIN_CODE_CLOUD_PASSPORT_AUTH_FAILED = "CHAIN_CODE_CLOUD_PASSPORT_AUTH_FAILED" const val CHAIN_CODE_CLOUD_SOCKET_INIT = "CHAIN_CODE_CLOUD_SOCKET_INIT" const val CHAIN_CODE_CLOUD_CONNECT_FAIL = "CHAIN_CODE_CLOUD_CONNECT_FAIL" const val CHAIN_CODE_CLOUD_CONNECT_SUCCESS = "CHAIN_CODE_CLOUD_CONNECT_SUCCESS" diff --git a/gradle.properties b/gradle.properties index 51cc505e3d..fab16a8ace 100644 --- a/gradle.properties +++ b/gradle.properties @@ -66,23 +66,23 @@ SERVICE_BIZ_VERSION=1.2.4 LOGLIB_VERSION=1.7.0 ######## MogoAiCloudSDK Version ######## # 网络请求LOGLIB_VERSION -MOGO_NETWORK_VERSION=1.4.7.9 +MOGO_NETWORK_VERSION=1.4.7.10 # 鉴权 -MOGO_PASSPORT_VERSION=1.4.7.9 +MOGO_PASSPORT_VERSION=1.4.7.10 # 常链接 -MOGO_SOCKET_VERSION=1.4.7.9 +MOGO_SOCKET_VERSION=1.4.7.10 # 数据采集 -MOGO_REALTIME_VERSION=1.4.7.9 +MOGO_REALTIME_VERSION=1.4.7.10 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.4.7.9 +MOGO_TANLU_VERSION=1.4.7.10 # 直播推流 -MOGO_LIVE_VERSION=1.4.7.9 +MOGO_LIVE_VERSION=1.4.7.10 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.4.7.9 +MOGO_TRAFFICLIVE_VERSION=1.4.7.10 # 定位服务 -MOGO_LOCATION_VERSION=1.4.7.9 +MOGO_LOCATION_VERSION=1.4.7.10 # 远程通讯模块 -MOGO_TELEMATIC_VERSION=1.4.7.9 +MOGO_TELEMATIC_VERSION=1.4.7.10 ######## MogoAiCloudSDK Version ######## # 自研地图 MAP_SDK_VERSION=2.14.1.2