summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Keeler <jacob.keeler@livioradio.com>2020-11-16 16:21:01 -0500
committerGitHub <noreply@github.com>2020-11-16 16:21:01 -0500
commit9dc3c070c58a644bb54b08808aa0a39627e0cf09 (patch)
tree8dfa0a7f8a55467ad24d93b21305d49c78fd7b77
parent7871541192bab4a9658d9c0ef90a513edf660a6d (diff)
downloadsdl_core-9dc3c070c58a644bb54b08808aa0a39627e0cf09.tar.gz
Fix policy validation of OnVehicleData message (#3568)
* Fix policy validation of OnVehicleData message * Fix unit tests Co-authored-by: Mykola Korniichuk <mkorniichuk@luxoft.com>
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/on_vehicle_data_notification.cc30
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/on_vehicle_data_notification_test.cc11
2 files changed, 38 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 e336b778ff..1799d7068c 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(),
+ &params_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] =
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 82eb19c45f..3f8dcbb488 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;