From a5bec104ad6f53f543015f734595329498226a0d Mon Sep 17 00:00:00 2001 From: li-tiangang4 Date: Wed, 28 Aug 2024 20:22:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E4=BF=A1=E8=AE=BE=E5=A4=87=E4=B8=8B?= =?UTF-8?q?=E7=BA=BF=EF=BC=8C=E6=B8=85=E7=90=86=E4=BA=91=E4=B8=8A=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=EF=BC=8C=E9=81=BF=E5=85=8D=E4=BA=91=E4=B8=8A=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=A7=AF=E7=B4=AF=E8=BF=87=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-tiangang4 --- .../include/accessmanager/access_manager.h | 5 +++- .../distributed_hardware_manager_factory.h | 1 + .../include/resourcemanager/db_adapter.h | 1 + .../resourcemanager/meta_info_manager.h | 1 + .../src/accessmanager/access_manager.cpp | 22 ++++++++++++++++++ .../distributed_hardware_manager_factory.cpp | 6 +++++ .../src/resourcemanager/db_adapter.cpp | 23 +++++++++++++++++++ .../src/resourcemanager/meta_info_manager.cpp | 14 +++++++++++ .../src/resource_manager_test.cpp | 16 ++++++++++++- 9 files changed, 87 insertions(+), 2 deletions(-) diff --git a/services/distributedhardwarefwkservice/include/accessmanager/access_manager.h b/services/distributedhardwarefwkservice/include/accessmanager/access_manager.h index 74d95716..83460758 100644 --- a/services/distributedhardwarefwkservice/include/accessmanager/access_manager.h +++ b/services/distributedhardwarefwkservice/include/accessmanager/access_manager.h @@ -29,7 +29,8 @@ namespace OHOS { namespace DistributedHardware { class AccessManager : public std::enable_shared_from_this, public DmInitCallback, - public DeviceStateCallback { + public DeviceStateCallback, + public DevTrustChangeCallback { public: AccessManager(const AccessManager &) = delete; AccessManager &operator = (const AccessManager &) = delete; @@ -46,6 +47,7 @@ public: virtual void OnDeviceOffline(const DmDeviceInfo &deviceInfo) override; virtual void OnDeviceReady(const DmDeviceInfo &deviceInfo) override; virtual void OnDeviceChanged(const DmDeviceInfo &deviceInfo) override; + virtual void OnDeviceTrustChange(const std::string &deviceId, DmAuthForm authform) override; /* Send device online event which is already online */ void CheckTrustedDeviceOnline(); int32_t Dump(const std::vector &argsStr, std::string &result); @@ -55,6 +57,7 @@ private: int32_t UnRegisterDevStateCallback(); int32_t InitDeviceManager(); int32_t UnInitDeviceManager(); + int32_t RegRemDevTrustChangeCallback(); std::mutex accessMutex_; }; } // namespace DistributedHardware diff --git a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h index 3ff6c59b..ad91d5a4 100644 --- a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h +++ b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h @@ -36,6 +36,7 @@ public: int32_t SendOffLineEvent(const std::string &networkId, const std::string &uuid, const std::string &udid, uint16_t deviceType); int32_t GetComponentVersion(std::unordered_map &versionMap); + int32_t DeleteCloudDataByKey(const std::string &deviceId); int Dump(const std::vector &argsStr, std::string &result); void UnInit(); diff --git a/services/distributedhardwarefwkservice/include/resourcemanager/db_adapter.h b/services/distributedhardwarefwkservice/include/resourcemanager/db_adapter.h index 935b9a08..56ea9c92 100644 --- a/services/distributedhardwarefwkservice/include/resourcemanager/db_adapter.h +++ b/services/distributedhardwarefwkservice/include/resourcemanager/db_adapter.h @@ -54,6 +54,7 @@ public: int32_t RemoveDataByKey(const std::string &key); std::vector GetEntriesByKeys(const std::vector &keys); bool SyncDataByNetworkId(const std::string &networkId); + bool DeleteCloudDataByKey(const std::string &deviceId); private: int32_t RegisterChangeListener(); diff --git a/services/distributedhardwarefwkservice/include/resourcemanager/meta_info_manager.h b/services/distributedhardwarefwkservice/include/resourcemanager/meta_info_manager.h index 94ab3401..3c721699 100644 --- a/services/distributedhardwarefwkservice/include/resourcemanager/meta_info_manager.h +++ b/services/distributedhardwarefwkservice/include/resourcemanager/meta_info_manager.h @@ -51,6 +51,7 @@ public: std::vector> &metaCapInfos); int32_t GetMetaDataByDHType(const DHType dhType, MetaCapInfoMap &metaInfoMap); int32_t SyncDataByNetworkId(const std::string &networkId); + int32_t DeleteCloudDataByKey(const std::string &deviceId); /* Database data changes callback */ virtual void OnChange(const DistributedKv::ChangeNotification &changeNotification) override; /* Cloud data changes callback */ diff --git a/services/distributedhardwarefwkservice/src/accessmanager/access_manager.cpp b/services/distributedhardwarefwkservice/src/accessmanager/access_manager.cpp index d51862f5..35726584 100644 --- a/services/distributedhardwarefwkservice/src/accessmanager/access_manager.cpp +++ b/services/distributedhardwarefwkservice/src/accessmanager/access_manager.cpp @@ -58,6 +58,10 @@ int32_t AccessManager::Init() DHLOGE("RegisterDevStateCallback failed"); return ERR_DH_FWK_ACCESS_REGISTER_DM_FAILED; } + if (RegRemDevTrustChangeCallback() != DH_FWK_SUCCESS) { + DHLOGE("RegRemDevTrustChangeCallback failed"); + return ERR_DH_FWK_ACCESS_REGISTER_DM_FAILED; + } return DH_FWK_SUCCESS; } @@ -98,6 +102,12 @@ int32_t AccessManager::UnRegisterDevStateCallback() return DeviceManager::GetInstance().UnRegisterDevStateCallback(DH_FWK_PKG_NAME); } +int32_t AccessManager::RegRemDevTrustChangeCallback() +{ + return DeviceManager::GetInstance().RegRemDevTrustChangeCallback(DH_FWK_PKG_NAME, shared_from_this()); +} + + void AccessManager::OnRemoteDied() { for (int32_t tryCount = 0; tryCount < DH_RETRY_INIT_DM_COUNT; ++tryCount) { @@ -176,6 +186,18 @@ void AccessManager::OnDeviceChanged(const DmDeviceInfo &deviceInfo) return; } +void AccessManager::OnDeviceTrustChange(const std::string &deviceId, DmAuthForm authform) +{ + DHLOGI("Trust device: %{public}s state change, authform: %{public}d", + GetAnonyString(deviceId).c_str(), static_cast(authform)); + if (!IsIdLengthValid(deviceId)) { + return; + } + if (authform == DmAuthForm::IDENTICAL_ACCOUNT) { + DistributedHardwareManagerFactory::GetInstance().DeleteCloudDataByKey(deviceId); + } +} + void AccessManager::CheckTrustedDeviceOnline() { std::vector deviceList; diff --git a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp index 45f651f1..b42f2d29 100644 --- a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp +++ b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp @@ -225,6 +225,12 @@ int32_t DistributedHardwareManagerFactory::GetComponentVersion(std::unordered_ma return DistributedHardwareManager::GetInstance().GetComponentVersion(versionMap); } +int32_t DistributedHardwareManagerFactory::DeleteCloudDataByKey(const std::string &deviceId) +{ + DHLOGI("Deleta cloudData start"); + return MetaInfoManager::GetInstance()->DeleteCloudDataByKey(deviceId); +} + int32_t DistributedHardwareManagerFactory::Dump(const std::vector &argsStr, std::string &result) { return DistributedHardwareManager::GetInstance().Dump(argsStr, result); diff --git a/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp b/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp index 8743f00f..52f86695 100644 --- a/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp +++ b/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp @@ -560,5 +560,28 @@ bool DBAdapter::SyncDataByNetworkId(const std::string &networkId) } return true; } + +bool DBAdapter::DeleteCloudDataByKey(const std::string &deviceId) +{ + DHLOGI("Delete cloudData start, deviceId: %{public}s", GetAnonyString(deviceId).c_str()); + std::string udIdHash = Sha256(deviceId); + DistributedKv::Key allEntryKeyPrefix(udIdHash); + std::vector allEntries; + DistributedKv::Status status = kvStoragePtr_->GetEntries(allEntryKeyPrefix, allEntries); + if (status != DistributedKv::Status::SUCCESS) { + DHLOGE("GetEntries error: %{public}d", status); + return false; + } + std::vector keys; + for (const auto &entry : allEntries) { + keys.push_back(entry.key); + } + status = kvStoragePtr_->DeleteBatch(keys); + if (status != DistributedKv::Status::SUCCESS) { + DHLOGE("Delete cloudData failed, error: %{public}d", status); + return false; + } + return true; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp b/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp index f4c6762e..7b9b88ac 100644 --- a/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp +++ b/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp @@ -339,6 +339,20 @@ int32_t MetaInfoManager::SyncDataByNetworkId(const std::string &networkId) return DH_FWK_SUCCESS; } +int32_t MetaInfoManager::DeleteCloudDataByKey(const std::string &deviceId) +{ + if (!IsIdLengthValid(deviceId)) { + DHLOGE("deviceId: %{public}s is invalid", GetAnonyString(deviceId).c_str()); + return ERR_DH_FWK_PARA_INVALID; + } + if (dbAdapterPtr_ == nullptr) { + DHLOGE("dbAdapterPtr is null"); + return ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL; + } + dbAdapterPtr_->DeleteCloudDataByKey(deviceId); + return DH_FWK_SUCCESS; +} + void MetaInfoManager::OnChange(const DistributedKv::ChangeNotification &changeNotification) { DHLOGI("MetaInfoManager: DB data OnChange"); diff --git a/services/distributedhardwarefwkservice/test/unittest/common/resourcemanager/src/resource_manager_test.cpp b/services/distributedhardwarefwkservice/test/unittest/common/resourcemanager/src/resource_manager_test.cpp index e754cea8..5a80e39b 100644 --- a/services/distributedhardwarefwkservice/test/unittest/common/resourcemanager/src/resource_manager_test.cpp +++ b/services/distributedhardwarefwkservice/test/unittest/common/resourcemanager/src/resource_manager_test.cpp @@ -1214,10 +1214,24 @@ HWTEST_F(ResourceManagerTest, SyncDataByNetworkId_001, TestSize.Level0) ret = MetaInfoManager::GetInstance()->SyncDataByNetworkId(networkId); EXPECT_EQ(DH_FWK_SUCCESS, ret); - MetaInfoManager::GetInstance()->dbAdapterPtr_ = nullptr; ret = MetaInfoManager::GetInstance()->SyncDataByNetworkId(networkId); EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret); } + +HWTEST_F(ResourceManagerTest, DeleteCloudDataByKey_001, TestSize.Level0) +{ + std::string deviceId = ""; + auto ret = MetaInfoManager::GetInstance()->DeleteCloudDataByKey(deviceId); + EXPECT_EQ(ERR_DH_FWK_PARA_INVALID, ret); + + deviceId = "deviceId_test"; + ret = MetaInfoManager::GetInstance()->DeleteCloudDataByKey(deviceId); + EXPECT_EQ(DH_FWK_SUCCESS, ret); + + MetaInfoManager::GetInstance()->dbAdapterPtr_ = nullptr; + ret = MetaInfoManager::GetInstance()->DeleteCloudDataByKey(deviceId); + EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL, ret); +} } // namespace DistributedHardware } // namespace OHOS -- Gitee