From f115a6475eda87cad9b8b33e5dc36a1510465a32 Mon Sep 17 00:00:00 2001 From: zhuhan Date: Tue, 7 Mar 2023 14:06:18 +0800 Subject: [PATCH] static white list Signed-off-by: zhuhan Change-Id: Iee631ffa4018b2057a9470b3b47b3feaf94dc076 --- services/BUILD.gn | 8 ---- services/include/bundle_manager_helper.h | 11 +++++ services/include/static_subscriber_manager.h | 2 +- .../resource/static_subscriber_config.json | 7 --- services/src/bundle_manager_helper.cpp | 15 ++++++ services/src/static_subscriber_manager.cpp | 25 +++++----- .../mock/mock_bundle_manager_helper.cpp | 6 +++ .../static_subscriber_manager_unit_test.cpp | 48 +++++++++---------- 8 files changed, 69 insertions(+), 53 deletions(-) delete mode 100644 services/resource/static_subscriber_config.json diff --git a/services/BUILD.gn b/services/BUILD.gn index ab256338..d5ad01d9 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -70,7 +70,6 @@ ohos_shared_library("cesfwk_services") { public_configs = [ ":ces_services_public_config" ] deps = [ - ":static_subscriber_config.json", "${ability_runtime_path}/frameworks/native/ability/native:static_subscriber_ipc", "${ces_common_path}:libevent_common", "${ces_core_path}:cesfwk_core", @@ -118,7 +117,6 @@ ohos_static_library("cesfwk_services_static") { public_configs = [ ":ces_services_public_config" ] deps = [ - ":static_subscriber_config.json", "${ability_runtime_path}/frameworks/native/ability/native:static_subscriber_ipc", "${ces_common_path}:libevent_common", "${ces_core_path}:cesfwk_core", @@ -155,9 +153,3 @@ ohos_static_library("cesfwk_services_static") { subsystem_name = "notification" part_name = "common_event_service" } - -ohos_prebuilt_etc("static_subscriber_config.json") { - source = "//base/notification/common_event_service/services/resource/static_subscriber_config.json" - subsystem_name = "notification" - part_name = "common_event_service" -} diff --git a/services/include/bundle_manager_helper.h b/services/include/bundle_manager_helper.h index a4e30c6e..ba073987 100644 --- a/services/include/bundle_manager_helper.h +++ b/services/include/bundle_manager_helper.h @@ -87,6 +87,17 @@ public: */ void ClearBundleManagerHelper(); + /** + * @brief Obtains information about all installed applications of a specified user. + * @param flag Indicates the flag used to specify information contained + * in the ApplicationInfo objects that will be returned. + * @param userId Indicates the user ID. + * @param appInfos Indicates all of the obtained ApplicationInfo objects. + * @return Returns true if the application is successfully obtained; returns false otherwise. + */ + bool GetApplicationInfos(const AppExecFwk::ApplicationFlag flag, int userId, + std::vector &appInfos); + private: bool GetBundleMgrProxy(); diff --git a/services/include/static_subscriber_manager.h b/services/include/static_subscriber_manager.h index 9e9c657f..9e46c2a3 100644 --- a/services/include/static_subscriber_manager.h +++ b/services/include/static_subscriber_manager.h @@ -62,7 +62,7 @@ private: } }; - bool InitAllowList(); + bool InitAllowList(const int32_t &userId); bool InitValidSubscribers(); void UpdateSubscriber(const CommonEventData &data); void ParseEvents(const std::string &extensionName, const std::string &extensionBundleName, diff --git a/services/resource/static_subscriber_config.json b/services/resource/static_subscriber_config.json deleted file mode 100644 index cb041e66..00000000 --- a/services/resource/static_subscriber_config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "apps": [ - "com.ohos.launcher", - "com.ohos.systemui", - "com.ohos.mms" - ] -} \ No newline at end of file diff --git a/services/src/bundle_manager_helper.cpp b/services/src/bundle_manager_helper.cpp index 2f18b786..a13d13ae 100644 --- a/services/src/bundle_manager_helper.cpp +++ b/services/src/bundle_manager_helper.cpp @@ -197,5 +197,20 @@ void BundleManagerHelper::ClearBundleManagerHelper() } sptrBundleMgr_ = nullptr; } + +bool BundleManagerHelper::GetApplicationInfos(const AppExecFwk::ApplicationFlag flag, int userId, + std::vector &appInfos) +{ + EVENT_LOGI("enter"); + + std::lock_guard lock(mutex_); + + if (!GetBundleMgrProxy()) { + EVENT_LOGE("failed to get bms proxy"); + return false; + } + + return sptrBundleMgr_->GetApplicationInfos(flag, userId, appInfos); +} } // namespace EventFwk } // namespace OHOS \ No newline at end of file diff --git a/services/src/static_subscriber_manager.cpp b/services/src/static_subscriber_manager.cpp index 01eb8752..879c6f9e 100644 --- a/services/src/static_subscriber_manager.cpp +++ b/services/src/static_subscriber_manager.cpp @@ -30,7 +30,6 @@ namespace OHOS { namespace EventFwk { namespace { -const std::string STATIC_SUBSCRIBER_CONFIG_FILE = "/system/etc/static_subscriber_config.json"; const std::string CONFIG_APPS = "apps"; constexpr static char JSON_KEY_COMMON_EVENTS[] = "commonEvents"; constexpr static char JSON_KEY_NAME[] = "name"; @@ -38,27 +37,29 @@ constexpr static char JSON_KEY_PERMISSION[] = "permission"; constexpr static char JSON_KEY_EVENTS[] = "events"; } +using namespace AppExecFwk; + StaticSubscriberManager::StaticSubscriberManager() {} StaticSubscriberManager::~StaticSubscriberManager() {} -bool StaticSubscriberManager::InitAllowList() +bool StaticSubscriberManager::InitAllowList(const int32_t &userId) { EVENT_LOGI("enter"); - nlohmann::json jsonObj; - std::ifstream jfile(STATIC_SUBSCRIBER_CONFIG_FILE); - if (!jfile.is_open()) { - EVENT_LOGI("json file can not open"); - hasInitAllowList_ = false; + std::vector appInfos {}; + if (!DelayedSingleton::GetInstance() + ->GetApplicationInfos(ApplicationFlag::GET_BASIC_APPLICATION_INFO, userId, appInfos)) { + EVENT_LOGE("GetApplicationInfos failed"); return false; } - jfile >> jsonObj; - jfile.close(); - for (auto j : jsonObj[CONFIG_APPS]) { - subscriberList_.emplace_back(j.get()); + for (auto const &appInfo : appInfos) { + if (!appInfo.allowCommonEvent.empty()) { + subscriberList_.emplace_back(appInfo.bundleName); + } } + hasInitAllowList_ = true; return true; } @@ -96,7 +97,7 @@ void StaticSubscriberManager::PublishCommonEvent(const CommonEventData &data, EVENT_LOGI("enter, event = %{public}s, userId = %{public}d", data.GetWant().GetAction().c_str(), userId); std::lock_guard lock(subscriberMutex_); - if (!hasInitAllowList_ && !InitAllowList()) { + if (!hasInitAllowList_ && !InitAllowList(userId)) { EVENT_LOGE("failed to init subscriber list"); return; } diff --git a/services/test/unittest/mock/mock_bundle_manager_helper.cpp b/services/test/unittest/mock/mock_bundle_manager_helper.cpp index 09e12fc6..0d2520b1 100644 --- a/services/test/unittest/mock/mock_bundle_manager_helper.cpp +++ b/services/test/unittest/mock/mock_bundle_manager_helper.cpp @@ -244,5 +244,11 @@ void BundleManagerHelper::ClearBundleManagerHelper() { g_mockIsClearBundleManagerHelperCalled = true; } + +bool BundleManagerHelper::GetApplicationInfos(const AppExecFwk::ApplicationFlag flag, int userId, + std::vector &appInfos) +{ + return true; +} } // namespace EventFwk } // namespace OHOS \ No newline at end of file diff --git a/services/test/unittest/static_subscriber_manager_unit_test/static_subscriber_manager_unit_test.cpp b/services/test/unittest/static_subscriber_manager_unit_test/static_subscriber_manager_unit_test.cpp index 74527d95..108948e1 100644 --- a/services/test/unittest/static_subscriber_manager_unit_test/static_subscriber_manager_unit_test.cpp +++ b/services/test/unittest/static_subscriber_manager_unit_test/static_subscriber_manager_unit_test.cpp @@ -40,7 +40,6 @@ extern void ResetBundleManagerHelperMock(); extern void ResetAccessTokenHelperMock(); namespace { - constexpr uint8_t TEST_ALLOWLIST_SIZE = 3; constexpr uint8_t TEST_MUL_SIZE = 2; constexpr uint8_t MOCK_CASE_2 = 2; constexpr uint8_t MOCK_CASE_3 = 3; @@ -90,11 +89,10 @@ HWTEST_F(StaticSubscriberManagerUnitTest, InitAllowListTest_0100, Function | Med std::shared_ptr manager = std::make_shared(); ASSERT_NE(nullptr, manager); // Init - bool initResult = manager->InitAllowList(); + int32_t userId = 100; + bool initResult = manager->InitAllowList(userId); // expect init success EXPECT_TRUE(initResult); - // expect allow list has apps - EXPECT_EQ(TEST_ALLOWLIST_SIZE, manager->subscriberList_.size()); // expect hasInit true EXPECT_TRUE(manager->hasInitAllowList_); } @@ -2101,11 +2099,11 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_0100, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); // expect that targer event has two subscribers auto subscribers = manager->validSubscribers_[testNormalEventName]; - EXPECT_EQ(1, subscribers.size()); - EXPECT_TRUE(IsConnectAbilityCalled()); + EXPECT_EQ(0, subscribers.size()); + EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -2260,7 +2258,7 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_0400, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -2352,7 +2350,7 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_0600, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -2444,7 +2442,7 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_0800, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -2536,7 +2534,7 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_1000, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -2628,7 +2626,7 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_1200, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -2920,10 +2918,10 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_1700, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, 1); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); // expect that targer event has two subscribers auto subscribers = manager->validSubscribers_[testNormalEventName]; - EXPECT_EQ(1, subscribers.size()); + EXPECT_EQ(0, subscribers.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -2970,11 +2968,11 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_1800, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); // expect that targer event has two subscribers auto subscribers = manager->validSubscribers_[testNormalEventName]; - EXPECT_EQ(1, subscribers.size()); - EXPECT_TRUE(IsConnectAbilityCalled()); + EXPECT_EQ(0, subscribers.size()); + EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -3020,10 +3018,10 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_1900, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); // expect that targer event has two subscribers auto subscribers = manager->validSubscribers_[testNormalEventName]; - EXPECT_EQ(1, subscribers.size()); + EXPECT_EQ(0, subscribers.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -3070,10 +3068,10 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_2000, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); // expect that targer event has two subscribers auto subscribers = manager->validSubscribers_[testNormalEventName]; - EXPECT_EQ(1, subscribers.size()); + EXPECT_EQ(0, subscribers.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -3127,10 +3125,10 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_2100, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); // expect that targer event has two subscribers auto subscribers = manager->validSubscribers_[testNormalEventName]; - EXPECT_EQ(1, subscribers.size()); + EXPECT_EQ(0, subscribers.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } @@ -3177,10 +3175,10 @@ HWTEST_F(StaticSubscriberManagerUnitTest, PublishCommonEventTest_2200, Function // mock that GetOsAccountLocalIdFromUid success MockGetOsAccountLocalIdFromUid(true, MOCK_CASE_2); manager->PublishCommonEvent(testEventData, testPublishInfo, testCallerToken, testUserId, service, bundleName); - EXPECT_EQ(1, manager->validSubscribers_.size()); + EXPECT_EQ(0, manager->validSubscribers_.size()); // expect that targer event has two subscribers auto subscribers = manager->validSubscribers_[testNormalEventName]; - EXPECT_EQ(1, subscribers.size()); + EXPECT_EQ(0, subscribers.size()); EXPECT_FALSE(IsConnectAbilityCalled()); ResetAbilityManagerHelperState(); } -- Gitee