summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2018-10-01 11:34:31 -0400
committerJackLivio <jack@livio.io>2018-10-01 11:34:31 -0400
commit6912633eda53949395f8825dc0abdb2d03a2dbdf (patch)
treed7b75c0b2f5618a03a32f6b24c9bc95a0774c654
parent8b15bb1a05d7d287f3e9c5575af3c15a20936c15 (diff)
downloadsdl_core-6912633eda53949395f8825dc0abdb2d03a2dbdf.tar.gz
Allows User Consent for Default Functional Groups
-rw-r--r--src/components/policy/policy_external/include/policy/policy_helper.h15
-rw-r--r--src/components/policy/policy_external/src/policy_helper.cc34
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc11
3 files changed, 38 insertions, 22 deletions
diff --git a/src/components/policy/policy_external/include/policy/policy_helper.h b/src/components/policy/policy_external/include/policy/policy_helper.h
index 6f916b7cd0..e3cb509c15 100644
--- a/src/components/policy/policy_external/include/policy/policy_helper.h
+++ b/src/components/policy/policy_external/include/policy/policy_helper.h
@@ -100,7 +100,8 @@ struct CheckAppPolicy {
* @param result Result of check of updated policy
*/
void SetPendingPermissions(const AppPoliciesValueType& app_policy,
- PermissionsCheckResult result) const;
+ PermissionsCheckResult result,
+ AppPermissions& permissions_diff) const;
/**
* @brief Analyzes updated application policy whether any changes received. If
* yes - provides appropriate result code
@@ -200,6 +201,18 @@ struct CheckAppPolicy {
*/
bool IsRequestSubTypeChanged(const AppPoliciesValueType& app_policy) const;
+ /**
+ * @brief Helper function that inserts permissions into app_permissions_diff_
+ * map.
+ * udpated
+ * @param app_policy Reference to updated application policy
+ * @param permissions_diff Reference to app permissions to be inserted into
+ * map.
+ * @return void
+ */
+ void InsertPermission(const std::string& app_id,
+ const AppPermissions& permissions_diff);
+
private:
PolicyManagerImpl* pm_;
const std::shared_ptr<policy_table::Table> update_;
diff --git a/src/components/policy/policy_external/src/policy_helper.cc b/src/components/policy/policy_external/src/policy_helper.cc
index 2358c54bef..3beeabce1e 100644
--- a/src/components/policy/policy_external/src/policy_helper.cc
+++ b/src/components/policy/policy_external/src/policy_helper.cc
@@ -299,9 +299,16 @@ void CheckAppPolicy::AddResult(const std::string& app_id,
out_results_.insert(std::make_pair(app_id, result));
}
+void CheckAppPolicy::InsertPermission(const std::string& app_id,
+ const AppPermissions& permissions_diff) {
+ pm_->app_permissions_diff_lock_.Acquire();
+ pm_->app_permissions_diff_.insert(std::make_pair(app_id, permissions_diff));
+ pm_->app_permissions_diff_lock_.Release();
+}
+
bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
const std::string app_id = app_policy.first;
-
+ AppPermissions permissions_diff(app_id);
if (!IsKnownAppication(app_id)) {
LOG4CXX_WARN(logger_,
"Application:" << app_id << " is not present in snapshot.");
@@ -309,14 +316,17 @@ bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
}
if (!IsPredefinedApp(app_policy) && IsAppRevoked(app_policy)) {
- SetPendingPermissions(app_policy, RESULT_APP_REVOKED);
+ SetPendingPermissions(app_policy, RESULT_APP_REVOKED, permissions_diff);
AddResult(app_id, RESULT_APP_REVOKED);
+ InsertPermission(app_id, permissions_diff);
return true;
}
if (!IsPredefinedApp(app_policy) && !NicknamesMatch(app_policy)) {
- SetPendingPermissions(app_policy, RESULT_NICKNAME_MISMATCH);
+ SetPendingPermissions(
+ app_policy, RESULT_NICKNAME_MISMATCH, permissions_diff);
AddResult(app_id, RESULT_NICKNAME_MISMATCH);
+ InsertPermission(app_id, permissions_diff);
return true;
}
@@ -328,13 +338,15 @@ bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
if (is_request_type_changed) {
LOG4CXX_TRACE(logger_,
"Request types were changed for application: " << app_id);
- SetPendingPermissions(app_policy, RESULT_REQUEST_TYPE_CHANGED);
+ SetPendingPermissions(
+ app_policy, RESULT_REQUEST_TYPE_CHANGED, permissions_diff);
AddResult(app_id, RESULT_REQUEST_TYPE_CHANGED);
}
if (is_request_subtype_changed) {
LOG4CXX_TRACE(
logger_, "Request subtypes were changed for application: " << app_id);
- SetPendingPermissions(app_policy, RESULT_REQUEST_SUBTYPE_CHANGED);
+ SetPendingPermissions(
+ app_policy, RESULT_REQUEST_SUBTYPE_CHANGED, permissions_diff);
AddResult(app_id, RESULT_REQUEST_SUBTYPE_CHANGED);
}
}
@@ -344,6 +356,7 @@ bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
"Permissions for application:" << app_id
<< " wasn't changed.");
AddResult(app_id, result);
+ InsertPermission(app_id, permissions_diff);
return true;
}
@@ -352,19 +365,20 @@ bool CheckAppPolicy::operator()(const AppPoliciesValueType& app_policy) {
<< " have been changed.");
if (!IsPredefinedApp(app_policy)) {
- SetPendingPermissions(app_policy, result);
+ SetPendingPermissions(app_policy, result, permissions_diff);
AddResult(app_id, result);
}
+ InsertPermission(app_id, permissions_diff);
return true;
}
void policy::CheckAppPolicy::SetPendingPermissions(
const AppPoliciesValueType& app_policy,
- PermissionsCheckResult result) const {
+ PermissionsCheckResult result,
+ AppPermissions& permissions_diff) const {
using namespace rpc::policy_table_interface_base;
const std::string app_id = app_policy.first;
- AppPermissions permissions_diff(app_id);
const std::string priority =
policy_table::EnumToJsonString(app_policy.second.priority);
@@ -421,10 +435,6 @@ void policy::CheckAppPolicy::SetPendingPermissions(
if (need_send_priority) {
permissions_diff.priority = priority;
}
-
- pm_->app_permissions_diff_lock_.Acquire();
- pm_->app_permissions_diff_.insert(std::make_pair(app_id, permissions_diff));
- pm_->app_permissions_diff_lock_.Release();
}
PermissionsCheckResult CheckAppPolicy::CheckPermissionsChanges(
diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc
index e93eea3969..d624f7edc8 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -1261,15 +1261,8 @@ void PolicyManagerImpl::GetUserConsentForApp(
FunctionalGroupIDs allowed_groups =
Merge(consent_allowed_groups, preconsented_wo_disallowed_auto);
- FunctionalGroupIDs merged_stage_1 =
- Merge(default_groups, predataconsented_groups);
-
- FunctionalGroupIDs merged_stage_2 = Merge(merged_stage_1, device_groups);
-
- FunctionalGroupIDs merged_stage_3 =
- Merge(merged_stage_2, auto_allowed_groups);
-
- FunctionalGroupIDs excluded_stage_1 = ExcludeSame(all_groups, merged_stage_3);
+ FunctionalGroupIDs excluded_stage_1 =
+ ExcludeSame(all_groups, auto_allowed_groups);
FunctionalGroupIDs excluded_stage_2 =
ExcludeSame(excluded_stage_1, consent_disallowed_groups);