diff --git a/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp b/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp index 3cb2c96f8793fdfdfd260e60499dabd2b7c1ae5a..4a1080f465d740aca6ad6b38dca7c9f3310ed7e7 100644 --- a/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp +++ b/services/distributeddataservice/adapter/permission/src/bundle_checker.cpp @@ -64,8 +64,7 @@ std::string BundleChecker::GetAppId(const CheckerManager::StoreInfo &info) return info.bundleName; } - ZLOGD("bundleName:%{public}s, token:%{public}u, appId:%{public}s", - info.bundleName.c_str(), info.tokenId, tokenInfo.appID.c_str()); + ZLOGD("bundleName:%{public}s, appId:%{public}s", info.bundleName.c_str(), tokenInfo.appID.c_str()); return Crypto::Sha256(tokenInfo.appID); } diff --git a/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp b/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp index 974914e1eaa939a7d184d21ed403d1b6b65075d6..bbd1b897c7bafa4db587591477e1a4dfa8f8ba4e 100644 --- a/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp +++ b/services/distributeddataservice/adapter/permission/src/media_lib_checker.cpp @@ -58,7 +58,7 @@ std::string MediaLibChecker::GetAppId(const CheckerManager::StoreInfo &info) if (!success) { return ""; } - ZLOGD("orion: %{public}s, uid: %{public}d, bundle: %{public}s appId: %{public}s", orionBundle.c_str(), info.uid, + ZLOGD("orion: %{public}s, bundle: %{public}s appId: %{public}s", orionBundle.c_str(), info.bundleName.c_str(), bundleInfo->appId.c_str()); return Crypto::Sha256(bundleInfo->appId); } diff --git a/services/distributeddataservice/adapter/permission/src/system_checker.cpp b/services/distributeddataservice/adapter/permission/src/system_checker.cpp index 807620410b9ced23c805f701f40115bd8f3ae156..7e23910c2af2ea2a3fd1beaf2a3e659e2ff404d2 100644 --- a/services/distributeddataservice/adapter/permission/src/system_checker.cpp +++ b/services/distributeddataservice/adapter/permission/src/system_checker.cpp @@ -46,8 +46,7 @@ std::string SystemChecker::GetAppId(const CheckerManager::StoreInfo &info) return ""; } std::string appId = (trusts_.find(info.bundleName) != trusts_.end()) ? trusts_[info.bundleName] : info.bundleName; - ZLOGD("bundleName:%{public}s, token:%{public}u, appId:%{public}s", info.bundleName.c_str(), info.tokenId, - appId.c_str()); + ZLOGD("bundleName:%{public}s, appId:%{public}s", info.bundleName.c_str(), appId.c_str()); return appId; } diff --git a/services/distributeddataservice/app/src/kvstore_app_accessor.cpp b/services/distributeddataservice/app/src/kvstore_app_accessor.cpp index b504a340f63449fe1e8c43f2b2540a473d997d49..993a197cd17bce1b032268c921a8d4895874f15b 100644 --- a/services/distributeddataservice/app/src/kvstore_app_accessor.cpp +++ b/services/distributeddataservice/app/src/kvstore_app_accessor.cpp @@ -24,7 +24,7 @@ #include "kvstore_meta_manager.h" #include "metadata/meta_data_manager.h" #include "metadata/store_meta_data.h" -#include "metadata//secret_key_meta_data.h" +#include "metadata/secret_key_meta_data.h" #include "log_print.h" #include "permission_validator.h" @@ -51,17 +51,6 @@ KvStoreAppAccessor &KvStoreAppAccessor::GetInstance() void KvStoreAppAccessor::EnableKvStoreAutoLaunch(const AppAccessorParam ¶m) { return; - - auto callback = std::bind(&KvStoreAppAccessor::OnCallback, this, std::placeholders::_1, std::placeholders::_2, - std::placeholders::_3, std::placeholders::_4); - auto dbStatus = DistributedDB::KvStoreDelegateManager::EnableKvStoreAutoLaunch(param.userId, param.appId, - param.storeId, param.launchOption, - callback); - if (dbStatus == DistributedDB::DBStatus::OK || dbStatus == DistributedDB::DBStatus::ALREADY_SET) { - ZLOGI("AppId:%s enable auto launch success.", param.appId.c_str()); - return; - } - ZLOGW("AppId:%s enable auto launch failed.", param.appId.c_str()); } void KvStoreAppAccessor::EnableKvStoreAutoLaunch() diff --git a/services/distributeddataservice/app/src/session_manager/session_manager.cpp b/services/distributeddataservice/app/src/session_manager/session_manager.cpp index 7622c2b7ce4898201cec928f7e3a93092fe36b4a..a9cc0900c97eed22ae97877f0d0e832d7ebcda2d 100644 --- a/services/distributeddataservice/app/src/session_manager/session_manager.cpp +++ b/services/distributeddataservice/app/src/session_manager/session_manager.cpp @@ -26,6 +26,7 @@ #include "metadata/store_meta_data.h" #include "user_delegate.h" #include "utils/anonymous.h" +#include "utils/converter.h" namespace OHOS::DistributedData { using namespace OHOS::DistributedKv; @@ -44,16 +45,15 @@ Session SessionManager::GetSession(const SessionPoint &from, const std::string & session.sourceDeviceId = from.deviceId; session.targetDeviceId = targetDeviceId; auto users = UserDelegate::GetInstance().GetRemoteUserStatus(targetDeviceId); - StoreMetaData metaData; - auto key = StoreMetaData::GetKey({ from.deviceId, std::to_string(from.userId), - "default", from.appId, from.storeId }); - if (!MetaDataManager::GetInstance().LoadMeta(key, metaData)) { - return session; - } // system service if (from.userId == UserDelegate::SYSTEM_USER) { - if (CheckerManager::GetInstance().GetAppId({ metaData.uid, metaData.tokenId, metaData.bundleName }) - == metaData.bundleName) { + StoreMetaData metaData; + metaData.deviceId = from.deviceId; + metaData.user = std::to_string(from.userId); + metaData.bundleName = from.appId; + metaData.storeId = from.storeId; + if (MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData) && + CheckerManager::GetInstance().GetAppId(Converter::ConvertToStoreInfo(metaData)) == from.appId) { session.targetUserIds.push_back(UserDelegate::SYSTEM_USER); } } diff --git a/services/distributeddataservice/framework/test/checker_manager_test.cpp b/services/distributeddataservice/framework/test/checker_manager_test.cpp index bd14a56e78350196b2321f2028bd7672fc9c6dae..f39c9a206f8f28d148729d6e035f03f8cd2475ca 100644 --- a/services/distributeddataservice/framework/test/checker_manager_test.cpp +++ b/services/distributeddataservice/framework/test/checker_manager_test.cpp @@ -28,7 +28,7 @@ public: static void SetUpTestCase(void) {} static void TearDownTestCase(void) {} void SetUp(); - void TearDown() {} + void TearDown(); NativeTokenInfoParams infoInstance; }; @@ -39,11 +39,48 @@ void CheckerManagerTest::SetUp(void) infoInstance.processName = "foundation"; infoInstance.aplStr = "system_core"; + HapInfoParams info = { + .userID = 100, + .bundleName = "ohos.test.demo", + .instIndex = 0, + .appIDDesc = "ohos.test.demo" + }; + PermissionDef infoManagerTestPermDef = { + .permissionName = "ohos.permission.test", + .bundleName = "ohos.test.demo", + .grantMode = 1, + .availableLevel = APL_NORMAL, + .label = "label", + .labelId = 1, + .description = "open the door", + .descriptionId = 1 + }; + PermissionStateFull infoManagerTestState = { + .permissionName = "ohos.permission.test", + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {1} + }; + HapPolicyParams policy = { + .apl = APL_NORMAL, + .domain = "test.domain", + .permList = {infoManagerTestPermDef}, + .permStateList = {infoManagerTestState} + }; + AccessTokenKit::AllocHapToken(info, policy); + Bootstrap::GetInstance().LoadComponents(); Bootstrap::GetInstance().LoadDirectory(); Bootstrap::GetInstance().LoadCheckers(); Bootstrap::GetInstance().LoadNetworks(); } + +void CheckerManagerTest::TearDown() +{ + auto tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0); + AccessTokenKit::DeleteToken(tokenId); +} /** * @tc.name: checkers * @tc.desc: checker the bundle name of the system abilities. @@ -121,36 +158,6 @@ HWTEST_F(CheckerManagerTest, SystemCheckerIVI, TestSize.Level0) */ HWTEST_F(CheckerManagerTest, BundleChecker, TestSize.Level0) { - HapInfoParams info = { - .userID = 100, - .bundleName = "ohos.test.demo", - .instIndex = 0, - .appIDDesc = "ohos.test.demo" - }; - PermissionDef infoManagerTestPermDef = { - .permissionName = "ohos.permission.test", - .bundleName = "ohos.test.demo", - .grantMode = 1, - .availableLevel = APL_NORMAL, - .label = "label", - .labelId = 1, - .description = "open the door", - .descriptionId = 1 - }; - PermissionStateFull infoManagerTestState = { - .permissionName = "ohos.permission.test", - .isGeneral = true, - .resDeviceID = {"local"}, - .grantStatus = {PermissionState::PERMISSION_GRANTED}, - .grantFlags = {1} - }; - HapPolicyParams policy = { - .apl = APL_NORMAL, - .domain = "test.domain", - .permList = {infoManagerTestPermDef}, - .permStateList = {infoManagerTestState} - }; - AccessTokenKit::AllocHapToken(info, policy); CheckerManager::StoreInfo storeInfo; storeInfo.uid = 2000000; storeInfo.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0); diff --git a/services/distributeddataservice/service/kvdb/user_delegate.cpp b/services/distributeddataservice/service/kvdb/user_delegate.cpp index 0e75cb7ab358c16f0d4c2fd2a6d379884427ae28..cb0c3c5cf3b2808230f70c554d7352e6ff90896a 100644 --- a/services/distributeddataservice/service/kvdb/user_delegate.cpp +++ b/services/distributeddataservice/service/kvdb/user_delegate.cpp @@ -17,9 +17,9 @@ #define LOG_TAG "UserDelegate" +#include #include "account_delegate.h" #include "communication_provider.h" -#include "device_kvstore_impl.h" #include "executor_factory.h" #include "log_print.h" #include "metadata/meta_data_manager.h" @@ -29,18 +29,23 @@ using OHOS::AppDistributedKv::CommunicationProvider; using namespace OHOS::DistributedKv; std::string GetLocalDeviceId() { - return DeviceKvStoreImpl::GetLocalDeviceId(); + static std::string deviceId; + if (deviceId.empty()) { + deviceId = CommunicationProvider::GetInstance().GetLocalDevice().uuid; + } + + return deviceId; } std::vector UserDelegate::GetLocalUserStatus() { ZLOGI("begin"); - auto deviceInfo = CommunicationProvider::GetInstance().GetLocalDevice(); - if (deviceInfo.uuid.empty()) { + auto deviceId = GetLocalDeviceId(); + if (deviceId.empty()) { ZLOGE("failed to get local device id"); return {}; } - return GetUsers(deviceInfo.uuid); + return GetUsers(deviceId); } std::vector UserDelegate::GetRemoteUserStatus(const std::string &deviceId) @@ -74,15 +79,14 @@ void UserDelegate::DeleteUsers(const std::string &deviceId) void UserDelegate::UpdateUsers(const std::string &deviceId, const std::vector &userStatus) { ZLOGI("begin, device:%{public}.10s, users:%{public}zu", Anonymous::Change(deviceId).c_str(), userStatus.size()); - deviceUserMap_.ComputeIfPresent(deviceId, [](const auto &key, std::map &userMap) { - for (auto &user : userMap) { - user.second = false; + deviceUserMap_.Compute(deviceId, [&userStatus](const auto &key, std::map &userMap) { + userMap = {}; + for (auto &user : userStatus) { + userMap[user.id] = user.isActive; } return true; }); - for (auto &user : userStatus) { - deviceUserMap_[deviceId][user.id] = user.isActive; - } + ZLOGI("end, device:%{public}s, users:%{public}zu", Anonymous::Change(deviceId).c_str(), deviceUserMap_[deviceId].size()); } @@ -140,7 +144,7 @@ void UserDelegate::Init() } while (true); ZLOGI("update user meta ok"); }); - ExecutorFactory::GetInstance().Execute(std::move(retryTask)); + auto ret = AccountDelegate::GetInstance()->Subscribe(std::make_shared(*this)); MetaDataManager::GetInstance().Subscribe( UserMetaRow::KEY_PREFIX, [this](const std::string &key, const std::string &value, int32_t flag) -> auto { @@ -160,6 +164,9 @@ void UserDelegate::Init() } return true; }); + if (!InitLocalUserMeta()) { + ExecutorFactory::GetInstance().Execute(std::move(retryTask)); + } ZLOGD("subscribe os account ret:%{public}d", ret); }