From 33a14b4417bb8e453a1e62c25e13855ce7f7ee51 Mon Sep 17 00:00:00 2001 From: Mykola Korniichuk Date: Tue, 19 May 2020 15:34:33 +0300 Subject: [PATCH 1/2] Fix policy validation of OnVehicleData message # Conflicts: # src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/on_vehicle_data_notification.cc --- .../mobile/on_vehicle_data_notification.cc | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/on_vehicle_data_notification.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/on_vehicle_data_notification.cc index e336b778ffd..1799d7068ca 100644 --- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/on_vehicle_data_notification.cc +++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/on_vehicle_data_notification.cc @@ -103,10 +103,34 @@ void OnVehicleDataNotification::Run() { } } - SDL_LOG_DEBUG("Number of Notifications to be send: " << notify_apps.size()); - for (size_t idx = 0; idx < notify_apps.size(); idx++) { - SDL_LOG_INFO("Send OnVehicleData PRNDL notification to " + CommandParametersPermissions params_permissions; + application_manager_.CheckPolicyPermissions( + notify_apps[idx], + window_id(), + MessageHelper::StringifiedFunctionID( + mobile_api::FunctionID::OnVehicleDataID), + appSO[idx].enumerate(), + ¶ms_permissions); + + for (const auto& param : appSO[idx].enumerate()) { + const auto& allowed_params = params_permissions.allowed_params; + auto param_allowed = allowed_params.find(param); + if (allowed_params.end() == param_allowed) { + SDL_LOG_DEBUG("Param " << param << " is not allowed by policy for app " + << notify_apps[idx]->app_id() + << ". It will be ignored."); + appSO[idx].erase(param); + } + } + + if (appSO[idx].empty()) { + SDL_LOG_DEBUG("App " << notify_apps[idx]->app_id() + << " will be skipped: there is nothing to notify."); + continue; + } + + SDL_LOG_INFO("Send OnVehicleData notification to " << notify_apps[idx]->name().c_str() << " application id " << notify_apps[idx]->app_id()); (*message_)[strings::params][strings::connection_key] = From a89a0ba524491564b7deb8038c1550c28eefb58b Mon Sep 17 00:00:00 2001 From: jacobkeeler Date: Thu, 12 Nov 2020 14:06:10 -0500 Subject: [PATCH 2/2] Fix unit tests --- .../mobile/on_vehicle_data_notification_test.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/on_vehicle_data_notification_test.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/on_vehicle_data_notification_test.cc index 82eb19c45f9..3f8dcbb4881 100644 --- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/on_vehicle_data_notification_test.cc +++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/on_vehicle_data_notification_test.cc @@ -56,8 +56,10 @@ namespace on_vehicle_data_notification { namespace am = ::application_manager; using ::testing::_; +using ::testing::ContainerEq; using ::testing::Return; using ::testing::ReturnRef; +using ::testing::SetArgPointee; using am::commands::MessageSharedPtr; using vehicle_info_plugin::commands::OnVehicleDataNotification; @@ -119,6 +121,15 @@ TEST_F(OnVehicleDataNotificationTest, OnVehicleDataNotification_SUCCESS) { VehicleInfoAppExtensionUID)) .WillByDefault(Return(vi_app_extention_ptr)); + am::CommandParametersPermissions params_permissions; + params_permissions.allowed_params.insert(am::strings::gps); + params_permissions.allowed_params.insert(am::strings::speed); + EXPECT_CALL(app_mngr_, + CheckPolicyPermissions( + _, _, _, ContainerEq(params_permissions.allowed_params), _)) + .WillOnce(DoAll(SetArgPointee<4>(params_permissions), + Return(mobile_apis::Result::SUCCESS))); + MessageSharedPtr message(CreateMessage(smart_objects::SmartType_Map)); smart_objects::SmartObject gps_data; gps_data[am::strings::longitude_degrees] = 1.0;