diff --git a/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp b/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp index 81f65d7183ef5ae1d6e3b19d33107ecda3a84584..37a96aa453c9cc5d735fa07865bf67653557c32b 100644 --- a/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp +++ b/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp @@ -858,7 +858,8 @@ void NapiRequestPermission::GetPermissionsStatusExecute(napi_env env, void* data LOGD(ATM_DOMAIN, ATM_TAG, "PermList size: %{public}zu, asyncContext->permissionList size: %{public}zu.", permList.size(), asyncContext->permissionList.size()); - asyncContext->result.errorCode = AccessTokenKit::GetPermissionsStatus(asyncContext->tokenId, permList); + asyncContext->SetErrorCode(AccessTokenKit::GetPermissionsStatus(asyncContext->tokenId, permList)); + for (const auto& permState : permList) { LOGD(ATM_DOMAIN, ATM_TAG, "Permission: %{public}s", permState.permissionName.c_str()); asyncContext->permissionQueryResults.emplace_back(permState.state); diff --git a/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h b/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h index 45cd3f3905961fae5d4da412c5c66caa42e98f4c..8f605b3b9f0100b7ae8a92b633f164005e047626 100644 --- a/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h +++ b/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h @@ -56,6 +56,10 @@ struct RequestAsyncContext : public AtManagerAsyncWorkData { #ifdef EVENTHANDLER_ENABLE std::shared_ptr handler_ = nullptr; #endif + void SetErrorCode(int32_t errcode) + { + result.errorCode = errcode; + } }; struct RequestAsyncContextHandle { diff --git a/services/common/json_parse/src/json_parse_loader.cpp b/services/common/json_parse/src/json_parse_loader.cpp index 0c4bd78bc54b52a389cce33502f4123b80db4ec5..76a51844d41a798718c806f26c50239cf0b5d119 100644 --- a/services/common/json_parse/src/json_parse_loader.cpp +++ b/services/common/json_parse/src/json_parse_loader.cpp @@ -495,15 +495,16 @@ static bool IsPermissionReqValid(int32_t tokenApl, const std::string& permission return false; } -std::string ConfigPolicLoader::DumpNativeTokenInfo(const NativeTokenInfoBase& native) +static void AddNativeTokenInfo(CJsonUnique& j, const NativeTokenInfoBase& native) { - CJsonUnique j = CreateJson(); (void)AddUnsignedIntToJson(j, "tokenID", native.tokenID); (void)AddStringToJson(j, "processName", native.processName); (void)AddIntToJson(j, "apl", native.apl); +} - CJsonUnique permStateListJson = CreateJsonArray(); - CJsonUnique invalidPermStringJson = CreateJsonArray(); +static void AddPermStateListInNativeTokenInfo(const NativeTokenInfoBase& native, + CJsonUnique& permStateListJson, CJsonUnique& invalidPermStringJson) +{ for (auto iter = native.permStateList.begin(); iter != native.permStateList.end(); ++iter) { if (!IsPermissionReqValid(native.apl, iter->permissionName, native.nativeAcls)) { CJsonUnique tmpJson = CreateJsonString(iter->permissionName); @@ -516,6 +517,16 @@ std::string ConfigPolicLoader::DumpNativeTokenInfo(const NativeTokenInfoBase& na (void)AddUnsignedIntToJson(permStateJson, "grantFlag", iter->grantFlag); (void)AddObjToArray(permStateListJson, permStateJson); } +} + +std::string ConfigPolicLoader::DumpNativeTokenInfo(const NativeTokenInfoBase& native) +{ + CJsonUnique j = CreateJson(); + AddNativeTokenInfo(j, native); + + CJsonUnique permStateListJson = CreateJsonArray(); + CJsonUnique invalidPermStringJson = CreateJsonArray(); + AddPermStateListInNativeTokenInfo(native, permStateListJson, invalidPermStringJson); (void)AddObjToJson(j, "permStateList", permStateListJson); (void)AddObjToJson(j, "invalidPermList", invalidPermStringJson); diff --git a/services/tokensyncmanager/include/device/device_info_manager.h b/services/tokensyncmanager/include/device/device_info_manager.h index 6dd2bfc8808c5a1cad355aea6419d8707fb92857..8c1087d6e5bfbd3cfb944a4f094c5e1b35f09aa7 100644 --- a/services/tokensyncmanager/include/device/device_info_manager.h +++ b/services/tokensyncmanager/include/device/device_info_manager.h @@ -79,17 +79,17 @@ public: * Convert nodeId to deviceId(UUID) if possible. * * @param nodeId which is considered as indefinite id, maybe deviceId(UUID) or networkId. - * @return The deviceId if local or device online, otherwise return empty string. + * @return The deviceId if device online, otherwise return empty string. */ - std::string ConvertToUniversallyUniqueIdOrFetch(const std::string &nodeId) const; + std::string ConvertToUniversallyUniqueId(const std::string &nodeId) const; /** * Convert nodeId to deviceId(UDID) if possible. * * @param nodeId which is considered as indefinite id, maybe deviceId(UDID) or networkId. - * @return The deviceId if local or device online, otherwise return empty string. + * @return The deviceId if device online, otherwise return empty string. */ - std::string ConvertToUniqueDeviceIdOrFetch(const std::string &nodeId) const; + std::string ConvertToUniqueDeviceId(const std::string &nodeId, bool& isFoundDevice) const; /** * Check nodeId is uuid or not. diff --git a/services/tokensyncmanager/include/remote/soft_bus_manager.h b/services/tokensyncmanager/include/remote/soft_bus_manager.h index d53e94e62e6b8c5ca0ea575dda6500f1cd7eda62..a6f78081628029a8b6e635ccf94b0bafa086fdf3 100644 --- a/services/tokensyncmanager/include/remote/soft_bus_manager.h +++ b/services/tokensyncmanager/include/remote/soft_bus_manager.h @@ -100,6 +100,22 @@ public: */ std::string GetUniqueDeviceIdByNodeId(const std::string &networkId); + /** + * Convert nodeId to deviceId(UUID) if possible. + * + * @param nodeId which is considered as indefinite id, maybe deviceId(UUID) or networkId. + * @return The deviceId if local or device online, otherwise return empty string. + */ + std::string ConvertToUniversallyUniqueIdOrFetch(const std::string &nodeId); + + /** + * Convert nodeId to deviceId(UDID) if possible. + * + * @param nodeId which is considered as indefinite id, maybe deviceId(UDID) or networkId. + * @return The deviceId if local or device online, otherwise return empty string. + */ + std::string ConvertToUniqueDeviceIdOrFetch(const std::string &nodeId); + bool GetNetworkIdBySocket(const int32_t socket, std::string& networkId); int32_t GetRepeatTimes(); diff --git a/services/tokensyncmanager/src/device/device_info_manager.cpp b/services/tokensyncmanager/src/device/device_info_manager.cpp index 6c32c4e173c06e8843955f886b77d08de937c206..d357adde426be53b0f7a0a5b5fbd172c066085fb 100644 --- a/services/tokensyncmanager/src/device/device_info_manager.cpp +++ b/services/tokensyncmanager/src/device/device_info_manager.cpp @@ -86,11 +86,11 @@ void DeviceInfoManager::RemoveRemoteDeviceInfo(const std::string &nodeId, Device } } -std::string DeviceInfoManager::ConvertToUniversallyUniqueIdOrFetch(const std::string &nodeId) const +std::string DeviceInfoManager::ConvertToUniversallyUniqueId(const std::string &nodeId) const { std::string result; if (!DataValidator::IsDeviceIdValid(nodeId)) { - LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniversallyUniqueIdOrFetch: nodeId is invalid."); + LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniversallyUniqueId: nodeId is invalid."); return result; } DeviceInfo deviceInfo; @@ -100,31 +100,19 @@ std::string DeviceInfoManager::ConvertToUniversallyUniqueIdOrFetch(const std::st return deviceInfo.deviceId.universallyUniqueId; } -std::string DeviceInfoManager::ConvertToUniqueDeviceIdOrFetch(const std::string &nodeId) const +std::string DeviceInfoManager::ConvertToUniqueDeviceId(const std::string &nodeId, bool& isFoundDevice) const { + isFoundDevice = false; std::string result; if (!DataValidator::IsDeviceIdValid(nodeId)) { - LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniqueDeviceIdOrFetch: nodeId is invalid."); + LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniqueDeviceId: nodeId is invalid."); return result; } DeviceInfo deviceInfo; if (DeviceInfoRepository::GetInstance().FindDeviceInfo(nodeId, DeviceIdType::UNKNOWN, deviceInfo)) { - std::string uniqueDeviceId = deviceInfo.deviceId.uniqueDeviceId; - if (uniqueDeviceId.empty()) { - std::string udid = SoftBusManager::GetInstance().GetUniqueDeviceIdByNodeId(nodeId); - if (!udid.empty()) { - result = udid; - } else { - LOGD(ATM_DOMAIN, ATM_TAG, - "FindDeviceInfo succeed, udid and local udid is empty, nodeId(%{public}s)", - ConstantCommon::EncryptDevId(nodeId).c_str()); - } - } else { - LOGD(ATM_DOMAIN, ATM_TAG, - "FindDeviceInfo succeed, udid is empty, nodeId(%{public}s) ", - ConstantCommon::EncryptDevId(nodeId).c_str()); - result = uniqueDeviceId; - } + LOGD(ATM_DOMAIN, ATM_TAG, "FindDeviceInfo succeed, nodeId(%{public}s)", nodeId.c_str()); + isFoundDevice = true; + return deviceInfo.deviceId.uniqueDeviceId; } else { LOGD(ATM_DOMAIN, ATM_TAG, "FindDeviceInfo failed, nodeId(%{public}s)", ConstantCommon::EncryptDevId(nodeId).c_str()); diff --git a/services/tokensyncmanager/src/remote/remote_command_manager.cpp b/services/tokensyncmanager/src/remote/remote_command_manager.cpp index c50dbfc9efe7a3cace442b794650ac007484a72d..fc942fdd3c14779c69bf92a9c3c169c0b585e4bc 100644 --- a/services/tokensyncmanager/src/remote/remote_command_manager.cpp +++ b/services/tokensyncmanager/src/remote/remote_command_manager.cpp @@ -20,6 +20,7 @@ #endif #include "device_info_manager.h" #include "remote_command_factory.h" +#include "soft_bus_manager.h" #include "token_sync_manager_service.h" #include "accesstoken_kit.h" #include "constant_common.h" @@ -265,7 +266,7 @@ std::shared_ptr RemoteCommandManager::GetOrCreateRemoteCo std::shared_ptr RemoteCommandManager::GetExecutorChannel(const std::string &nodeId) { LOGD(ATM_DOMAIN, ATM_TAG, "Convert udid start, nodeId:%{public}s", ConstantCommon::EncryptDevId(nodeId).c_str()); - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); if (!DataValidator::IsDeviceIdValid(udid)) { LOGW(ATM_DOMAIN, ATM_TAG, "Converted udid is invalid, nodeId:%{public}s", ConstantCommon::EncryptDevId(nodeId).c_str()); diff --git a/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp b/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp index b1fed6a56e5e5890520334e43851ed7708bc55ce..601c0c6a3b42b794fc8cb7c6c4bc1617724ba251 100644 --- a/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp +++ b/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp @@ -20,6 +20,7 @@ #include "device_info_manager.h" #include "device_manager.h" #include "iservice_registry.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "system_ability_definition.h" #include "constant_common.h" @@ -85,11 +86,8 @@ void SoftBusDeviceConnectionListener::UnloadTokensyncService() void SoftBusDeviceConnectionListener::OnDeviceOffline(const DistributedHardware::DmDeviceInfo &info) { std::string networkId = std::string(info.networkId); - std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); - if (uuid.empty()) { - uuid = SoftBusManager::GetInstance().GetUniversallyUniqueIdByNodeId(networkId); - } - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); + std::string uuid = SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); if ((uuid == "") || (udid == "")) { LOGE(ATM_DOMAIN, ATM_TAG, "Uuid or udid is empty, offline failed."); return; diff --git a/services/tokensyncmanager/src/remote/soft_bus_manager.cpp b/services/tokensyncmanager/src/remote/soft_bus_manager.cpp index 39d9aba5f65c2fecc0c6816c181b33ef5ca3252c..3f6cdf622a4ffeea4ab79b07f01521c600d40cef 100644 --- a/services/tokensyncmanager/src/remote/soft_bus_manager.cpp +++ b/services/tokensyncmanager/src/remote/soft_bus_manager.cpp @@ -28,6 +28,7 @@ #include "libraryloader.h" #include "remote_command_manager.h" #include "soft_bus_device_connection_listener.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "token_setproc.h" @@ -543,6 +544,34 @@ int SoftBusManager::FulfillLocalDeviceInfo() fulfillMutex_.unlock(); return Constant::SUCCESS; } + +std::string SoftBusManager::ConvertToUniversallyUniqueIdOrFetch(const std::string& nodeId) +{ + std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueId(nodeId); + if (uuid.empty()) { + uuid = GetUniversallyUniqueIdByNodeId(nodeId); + } + return uuid; +} + +std::string SoftBusManager::ConvertToUniqueDeviceIdOrFetch(const std::string& nodeId) +{ + bool isFoundDevice = false; + std::string uniqueDeviceId = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceId(nodeId, isFoundDevice); + LOGE(ATM_DOMAIN, ATM_TAG, "nodeId %{public}d", isFoundDevice); + if (uniqueDeviceId.empty() && isFoundDevice) { + std::string udid = GetUniqueDeviceIdByNodeId(nodeId); + if (!udid.empty()) { + uniqueDeviceId = udid; + LOGD(ATM_DOMAIN, ATM_TAG, + "udid is empty, use local udid, nodeId(%{public}s)", ConstantCommon::EncryptDevId(nodeId).c_str()); + } else { + LOGD(ATM_DOMAIN, ATM_TAG, + "Udid and local udid is empty, nodeId(%{public}s)", ConstantCommon::EncryptDevId(nodeId).c_str()); + } + } + return uniqueDeviceId; +} } // namespace AccessToken } // namespace Security } // namespace OHOS diff --git a/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp b/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp index 5ac876c5242d263c1fecd2726f8e351baabc9fa6..75b0c33c065871dbea339c091c13ff04640f7e64 100644 --- a/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp +++ b/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp @@ -44,6 +44,7 @@ #include "remote_command_manager.h" #include "socket.h" #include "soft_bus_device_connection_listener.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "test_common.h" #include "token_setproc.h" @@ -134,11 +135,8 @@ void TokenSyncServiceTest::TearDown() void TokenSyncServiceTest::OnDeviceOffline(const DistributedHardware::DmDeviceInfo &info) { std::string networkId = info.networkId; - std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); - if (uuid.empty()) { - uuid = SoftBusManager::GetInstance().GetUniversallyUniqueIdByNodeId(networkId); - } - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); + std::string uuid = SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); LOGI(ATM_DOMAIN, ATM_TAG, "networkId: %{public}s, uuid: %{public}s, udid: %{public}s", diff --git a/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp b/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp index 081c8fef88adf43c9ae0efc5df2e19daa038f410..ec1a4674a189805daa279ba696edfd05f2be327e 100644 --- a/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp +++ b/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp @@ -45,6 +45,7 @@ #undef private #include "socket.h" #include "soft_bus_device_connection_listener.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "test_common.h" #include "token_setproc.h" @@ -143,11 +144,8 @@ void TokenSyncServiceTest::TearDown() void TokenSyncServiceTest::OnDeviceOffline(const DistributedHardware::DmDeviceInfo &info) { std::string networkId = info.networkId; - std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); - if (uuid.empty()) { - uuid = SoftBusManager::GetInstance().GetUniversallyUniqueIdByNodeId(networkId); - } - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); + std::string uuid = SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); LOGI(ATM_DOMAIN, ATM_TAG, "networkId: %{public}s, uuid: %{public}s, udid: %{public}s", @@ -1020,18 +1018,18 @@ HWTEST_F(TokenSyncServiceTest, RemoveRemoteDeviceInfo001, TestSize.Level0) /** * @tc.name: ConvertToUniversallyUniqueIdOrFetch001 - * @tc.desc: DeviceInfoManager::ConvertToUniversallyUniqueIdOrFetch function test + * @tc.desc: SoftBusManager::ConvertToUniversallyUniqueIdOrFetch function test * @tc.type: FUNC * @tc.require: */ HWTEST_F(TokenSyncServiceTest, ConvertToUniversallyUniqueIdOrFetch001, TestSize.Level0) { std::string nodeId; - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); // nodeId invalid + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); // nodeId invalid nodeId = "123"; // FindDeviceInfo false - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); std::string networkId = "123"; std::string universallyUniqueId = "123"; @@ -1043,7 +1041,7 @@ HWTEST_F(TokenSyncServiceTest, ConvertToUniversallyUniqueIdOrFetch001, TestSize. nodeId = "123"; // FindDeviceInfo true + universallyUniqueId is not empty - DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId); + SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId); nodeId = uniqueDeviceId; // FindDeviceInfo true + uniqueDeviceId != localDevice false @@ -1057,18 +1055,18 @@ HWTEST_F(TokenSyncServiceTest, ConvertToUniversallyUniqueIdOrFetch001, TestSize. /** * @tc.name: ConvertToUniqueDeviceIdOrFetch001 - * @tc.desc: DeviceInfoManager::ConvertToUniqueDeviceIdOrFetch function test + * @tc.desc: SoftBusManager::ConvertToUniqueDeviceIdOrFetch function test * @tc.type: FUNC * @tc.require: */ HWTEST_F(TokenSyncServiceTest, ConvertToUniqueDeviceIdOrFetch001, TestSize.Level0) { std::string nodeId; - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); // nodeId invalid + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); // nodeId invalid nodeId = "123"; // FindDeviceInfo false - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); std::string networkId = "123"; std::string universallyUniqueId = "123"; @@ -1080,7 +1078,7 @@ HWTEST_F(TokenSyncServiceTest, ConvertToUniqueDeviceIdOrFetch001, TestSize.Level nodeId = "123"; // FindDeviceInfo true + universallyUniqueId is not empty - DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); + SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); nodeId = uniqueDeviceId; // FindDeviceInfo true + uniqueDeviceId != localDevice false