summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandr Galiuzov <AGaliuzov@luxoft.com>2014-07-16 17:17:55 +0300
committerAleksandr Galiuzov <AGaliuzov@luxoft.com>2014-07-16 17:46:13 +0300
commit25606765d83de962ecca2b40a0efadc30009a7fc (patch)
tree6f387fc6a1969a381116a2454703ac176d68ead0
parentabe1fab3478913b19316cbb4fb21cca248124bef (diff)
downloadsdl_core-25606765d83de962ecca2b40a0efadc30009a7fc.tar.gz
APPLINK-8171 Implement validation for HMI requests
Current changes allosw to validate HMI request for user consents group. Now only keys that present in the corresponding field in database will be processed
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h2
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc2
-rw-r--r--src/components/policy/src/policy/include/policy/policy_manager.h7
-rw-r--r--src/components/policy/src/policy/include/policy/policy_manager_impl.h11
-rw-r--r--src/components/policy/src/policy/src/policy_manager_impl.cc43
5 files changed, 59 insertions, 6 deletions
diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h
index 56480fa28f..f87295113d 100644
--- a/src/components/application_manager/include/application_manager/policies/policy_handler.h
+++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h
@@ -127,7 +127,7 @@ class PolicyHandler :
* @brief Store user-changed permissions consent to DB
* @param permissions User-changed group permissions consent
*/
- void OnAppPermissionConsent(const PermissionConsent& permissions);
+ void OnAppPermissionConsent(PermissionConsent& permissions);
/**
* @brief Get appropriate message parameters and send them with response
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index 15e7a325d7..12d0fe404e 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -326,7 +326,7 @@ void PolicyHandler::SetDeviceInfo(std::string& device_id,
}
void PolicyHandler::OnAppPermissionConsent(
- const PermissionConsent& permissions) {
+ PermissionConsent &permissions) {
LOG4CXX_INFO(logger_, "OnAppPermissionConsent");
POLICY_LIB_CHECK_VOID();
if (!permissions.policy_app_id.empty()) {
diff --git a/src/components/policy/src/policy/include/policy/policy_manager.h b/src/components/policy/src/policy/include/policy/policy_manager.h
index 92c9e925c1..7a7d34c215 100644
--- a/src/components/policy/src/policy/include/policy/policy_manager.h
+++ b/src/components/policy/src/policy/include/policy/policy_manager.h
@@ -237,9 +237,12 @@ class PolicyManager : public usage_statistics::StatisticsManager {
/**
* @brief Set user consent for application functional groups
- * @param permissions User-defined application group pemissions
+ * @param permissions User-defined application group pemissions.
+ * The permissions is not const reference because it may contains
+ * valid data as well as invalid. So we will remove all invalid data
+ * from this structure.
*/
- virtual void SetUserConsentForApp(const PermissionConsent& permissions) = 0;
+ virtual void SetUserConsentForApp(PermissionConsent& permissions) = 0;
/**
* @brief Get default HMI level for application
diff --git a/src/components/policy/src/policy/include/policy/policy_manager_impl.h b/src/components/policy/src/policy/include/policy/policy_manager_impl.h
index a8a7bed815..c4fe32b25e 100644
--- a/src/components/policy/src/policy/include/policy/policy_manager_impl.h
+++ b/src/components/policy/src/policy/include/policy/policy_manager_impl.h
@@ -97,7 +97,7 @@ class PolicyManagerImpl : public PolicyManager {
virtual void SetDeviceInfo(const std::string& device_id,
const DeviceInfo& device_info);
- virtual void SetUserConsentForApp(const PermissionConsent& permissions);
+ virtual void SetUserConsentForApp(PermissionConsent &permissions);
virtual bool GetDefaultHmi(const std::string& policy_app_id,
std::string* default_hmi);
@@ -216,6 +216,15 @@ class PolicyManagerImpl : public PolicyManager {
*/
void CheckUpdateStatus();
+ /**
+ * @brief Validate PermissionConsent structure and removes all invalid data from it.
+ * So, after this method is done specified PermissionConsent will be valid or empty.
+ * @param group_names The groups according to which we will validate permissions
+ * @param permissions PermissionConsent structure that should be validated.
+ */
+ void EnsureCorrectPermissionConsent(const FunctionalGroupNames &group_names,
+ PermissionConsent& permissions);
+
PolicyListener* listener_;
PolicyTable policy_table_;
utils::SharedPtr<policy_table::Table> policy_table_snapshot_;
diff --git a/src/components/policy/src/policy/src/policy_manager_impl.cc b/src/components/policy/src/policy/src/policy_manager_impl.cc
index 3d16354c86..d63b607abd 100644
--- a/src/components/policy/src/policy/src/policy_manager_impl.cc
+++ b/src/components/policy/src/policy/src/policy_manager_impl.cc
@@ -739,13 +739,54 @@ void PolicyManagerImpl::SetDeviceInfo(const std::string& device_id,
#endif
}
+void PolicyManagerImpl::EnsureCorrectPermissionConsent(const FunctionalGroupNames& group_names, PermissionConsent& permissions)
+{
+ std::vector<FunctionalGroupPermission>::iterator group_perm_iter =
+ permissions.group_permissions.begin();
+
+ std::vector<FunctionalGroupPermission>::iterator group_perm_iter_end =
+ permissions.group_permissions.end();
+
+ for(; group_perm_iter != group_perm_iter_end; ++group_perm_iter) {
+
+ const std::uint32_t id = (*group_perm_iter).group_id;
+ FunctionalGroupNames::const_iterator group_name_iter = group_names.find(id);
+
+ if (group_names.end() == group_name_iter) {
+ LOG4CXX_WARN(logger_, "Can't change user consent for unexisted function."
+ << "\t\nid: " << id
+ << "\t\nalias: " << (*group_perm_iter).group_alias
+ << "\t\ngroup name: " << (*group_perm_iter).group_name);
+ }
+ // check if group_alias is not empty string
+ // which means it has user_consent_promt ability
+ else if ((*group_name_iter).second.first.empty()) {
+ LOG4CXX_WARN(logger_, "Specified function is not in user consent group."
+ << "\t\nid: " << id
+ << "\t\nalias: " << (*group_perm_iter).group_alias
+ << "\t\ngroup name: " << (*group_perm_iter).group_name);
+
+ permissions.group_permissions.erase(group_perm_iter);
+ }
+ }
+}
+
void PolicyManagerImpl::SetUserConsentForApp(
- const PermissionConsent& permissions) {
+ PermissionConsent& permissions) {
LOG4CXX_INFO(logger_, "SetUserConsentForApp");
#if defined (EXTENDED_POLICY)
PTExtRepresentation* pt_ext = dynamic_cast<PTExtRepresentation*>(policy_table_
.pt_data().get());
if (pt_ext) {
+
+ FunctionalGroupNames group_names;
+ if (!pt_ext->GetFunctionalGroupNames(group_names)) {
+ LOG4CXX_WARN(logger_, "Can't get functional group names");
+ return;
+ }
+
+ EnsureCorrectPermissionConsent(group_names, permissions);
+
// TODO(AOleynik): Change device id to appropriate value (MAC with SHA-256)
// in parameters
if (!pt_ext->SetUserPermissionsForApp(permissions)) {