From f2c7e8cc1700d24b541342eec7a09ac1b83dfaad Mon Sep 17 00:00:00 2001 From: AKalinich-Luxoft Date: Tue, 3 Oct 2017 11:48:18 +0300 Subject: Add new PermitResult values for PROPRIETARY flow Added new values for more detailed CheckPermissions result description. This values will be used in AM layer for generating info message string. Also there was added missed logic for checking RPC params and returning correct PermitResult code and params lists. --- .../policy_regular/include/policy/policy_types.h | 8 ++++- .../policy/policy_regular/src/cache_manager.cc | 10 ++++-- .../policy_regular/src/policy_manager_impl.cc | 38 ++++++++++++++++++++++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/components/policy/policy_regular/include/policy/policy_types.h b/src/components/policy/policy_regular/include/policy/policy_types.h index 25aa126a03..821ba36e75 100644 --- a/src/components/policy/policy_regular/include/policy/policy_types.h +++ b/src/components/policy/policy_regular/include/policy/policy_types.h @@ -113,7 +113,13 @@ typedef std::vector PermissionsList; */ typedef std::vector StringArray; -enum PermitResult { kRpcAllowed = 0, kRpcDisallowed, kRpcUserDisallowed }; +enum PermitResult { + kRpcAllowed = 0, + kRpcDisallowed, + kRpcUserDisallowed, + kRpcAllParamsDisallowed, + kRpcAllParamsUserDisallowed +}; /** * @struct Stores result of check: diff --git a/src/components/policy/policy_regular/src/cache_manager.cc b/src/components/policy/policy_regular/src/cache_manager.cc index 94a33a1e04..cb187a6094 100644 --- a/src/components/policy/policy_regular/src/cache_manager.cc +++ b/src/components/policy/policy_regular/src/cache_manager.cc @@ -471,6 +471,7 @@ void CacheManager::CheckPermissions(const policy_table::Strings& groups, policy_table::Strings::const_iterator app_groups_iter = groups.begin(); policy_table::Strings::const_iterator app_groups_iter_end = groups.end(); + result.hmi_level_permitted = PermitResult::kRpcDisallowed; policy_table::FunctionalGroupings::const_iterator concrete_group; for (; app_groups_iter != app_groups_iter_end; ++app_groups_iter) { @@ -492,8 +493,6 @@ void CacheManager::CheckPermissions(const policy_table::Strings& groups, hmi_level_e); if (rpc_param.hmi_levels.end() != hmi_iter) { - result.hmi_level_permitted = PermitResult::kRpcAllowed; - policy_table::Parameters::const_iterator params_iter = rpc_param.parameters->begin(); policy_table::Parameters::const_iterator params_iter_end = @@ -503,6 +502,13 @@ void CacheManager::CheckPermissions(const policy_table::Strings& groups, result.list_of_allowed_params.insert( policy_table::EnumToJsonString(*params_iter)); } + + if (rpc_param.parameters.is_initialized() && + result.list_of_allowed_params.empty()) { + result.hmi_level_permitted = PermitResult::kRpcAllParamsDisallowed; + } else { + result.hmi_level_permitted = PermitResult::kRpcAllowed; + } } } } diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc index 055b57d985..6b54d9450c 100644 --- a/src/components/policy/policy_regular/src/policy_manager_impl.cc +++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc @@ -408,6 +408,44 @@ void PolicyManagerImpl::CheckPermissions(const PTString& device_id, #endif // SDL_REMOTE_CONTROL cache_->CheckPermissions(groups, hmi_level, rpc, result); + + if (kRpcDisallowed == result.hmi_level_permitted) { + LOG4CXX_DEBUG(logger_, "RPC is not allowed. Stop parameters processing."); + return; + } + + if (kRpcAllParamsDisallowed == result.hmi_level_permitted) { + LOG4CXX_DEBUG(logger_, "All parameters are disallowed by policy."); + result.list_of_undefined_params = rpc_params; + return; + } + + if (kRpcAllowed == result.hmi_level_permitted && + result.list_of_allowed_params.empty()) { + LOG4CXX_DEBUG(logger_, "All parameters are allowed."); + result.list_of_allowed_params = rpc_params; + return; + } + + RPCParams::const_iterator parameter = rpc_params.begin(); + RPCParams::const_iterator end = rpc_params.end(); + for (; end != parameter; ++parameter) { + if (!result.HasParameter(*parameter)) { + LOG4CXX_DEBUG(logger_, + "Parameter " << *parameter << " is unknown." + " Adding to undefined list."); + result.list_of_undefined_params.insert(*parameter); + } + } + + if (result.DisallowedInclude(rpc_params)) { + LOG4CXX_DEBUG(logger_, "All parameters are disallowed by user."); + result.hmi_level_permitted = kRpcAllParamsUserDisallowed; + } else if (!result.IsAnyAllowed(rpc_params)) { + LOG4CXX_DEBUG(logger_, "There are no parameters allowed by policy."); + result.hmi_level_permitted = kRpcAllParamsDisallowed; + } + if (cache_->IsApplicationRevoked(app_id)) { // SDL must be able to notify mobile side with its status after app has // been revoked by backend -- cgit v1.2.1