From: Somin Kim Date: Tue, 8 Sep 2015 06:56:54 +0000 (+0900) Subject: Modified to restrict service application launch request X-Git-Tag: submit/tizen_tv/20150909.084931~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F16%2F47716%2F1;p=platform%2Fcore%2Fapi%2Fcontext.git Modified to restrict service application launch request Change-Id: I0fd57efdaaed657b6bb23a4ab2e507c29baf8dd6 Signed-off-by: Somin Kim --- diff --git a/CMakeLists.txt b/CMakeLists.txt index d8935ad..ed69fdc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ FILE(GLOB_RECURSE SRCS src/*.cpp) MESSAGE("Sources: ${SRCS}") # Dependencies -SET(DEPS "aul bundle capi-appfw-app-control context-common") +SET(DEPS "aul bundle capi-appfw-app-control context-common pkgmgr-info") # Common Options INCLUDE(FindPkgConfig) diff --git a/include/context_trigger.h b/include/context_trigger.h index abc6137..33087c2 100644 --- a/include/context_trigger.h +++ b/include/context_trigger.h @@ -774,6 +774,9 @@ int context_trigger_rule_add_entry(context_trigger_rule_h rule, context_trigger_ * @remarks In addition to the privilege http://tizen.org/privilege/appmanager.launch, * if it is an App Control that makes a call to someone, * the privilege http://tizen.org/privilege/call is also required. + * @remarks The launch request of the service application is restricted. + * The function will return #CONTEXT_TRIGGER_ERROR_INVALID_RULE, + * if the launch request is for the service application. * * @param[in] rule The rule * @param[in] app_control The App Control, which will be used to launch an application @@ -784,6 +787,7 @@ int context_trigger_rule_add_entry(context_trigger_rule_h rule, context_trigger_ * @retval #CONTEXT_TRIGGER_ERROR_PERMISSION_DENIED Permission denied * @retval #CONTEXT_TRIGGER_ERROR_OUT_OF_MEMORY Out of memory * @retval #CONTEXT_TRIGGER_ERROR_OPERATION_FAILED Operation failed + * @retval #CONTEXT_TRIGGER_ERROR_INVALID_RULE Invalid rule */ int context_trigger_rule_set_action_app_control(context_trigger_rule_h rule, app_control_h app_control); @@ -810,6 +814,7 @@ int context_trigger_rule_set_action_app_control(context_trigger_rule_h rule, app * @retval #CONTEXT_TRIGGER_ERROR_PERMISSION_DENIED Permission denied * @retval #CONTEXT_TRIGGER_ERROR_OUT_OF_MEMORY Out of memory * @retval #CONTEXT_TRIGGER_ERROR_OPERATION_FAILED Operation failed + * @retval #CONTEXT_TRIGGER_ERROR_INVALID_RULE Invalid rule */ int context_trigger_rule_set_action_notification(context_trigger_rule_h rule, const char* title, const char* content, const char* icon_path, app_control_h app_control); diff --git a/packaging/context.spec b/packaging/context.spec index 35d5746..5e5a1e6 100644 --- a/packaging/context.spec +++ b/packaging/context.spec @@ -11,6 +11,7 @@ BuildRequires: pkgconfig(aul) BuildRequires: pkgconfig(bundle) BuildRequires: pkgconfig(capi-appfw-app-control) BuildRequires: pkgconfig(context-common) +BuildRequires: pkgconfig(pkgmgr-info) %description Tizen Context Framework Native API diff --git a/src/context_trigger.cpp b/src/context_trigger.cpp index dbf366d..b050f68 100644 --- a/src/context_trigger.cpp +++ b/src/context_trigger.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include "rule_validator.h" #include "priv_util.h" @@ -367,6 +368,26 @@ EXTAPI int context_trigger_rule_set_action_app_control(context_trigger_rule_h ru return CONTEXT_TRIGGER_ERROR_INVALID_RULE; } + // Err: service app + char* app_id = NULL; + error = app_control_get_app_id(app_control, &app_id); + IF_FAIL_RETURN_TAG(error == ERR_NONE, error, _E, "Failed to get app id"); + + pkgmgrinfo_appinfo_h app_info; + error = pkgmgrinfo_appinfo_get_appinfo(app_id, &app_info); + g_free(app_id); + IF_FAIL_RETURN_TAG(error == PMINFO_R_OK, CONTEXT_TRIGGER_ERROR_INVALID_RULE, _E, "No such app"); + + char *app_type = NULL; + pkgmgrinfo_appinfo_get_component_type(app_info, &app_type); + if (!strcmp(app_type, "svcapp")) { + _E("Service application is restricted"); + pkgmgrinfo_appinfo_destroy_appinfo(app_info); + return CONTEXT_TRIGGER_ERROR_INVALID_RULE; + } + pkgmgrinfo_appinfo_destroy_appinfo(app_info); + + // Set action type (rule->jrule).set(CT_RULE_DETAILS"."CT_RULE_ACTION, CT_RULE_ACTION_TYPE, CT_RULE_ACTION_TYPE_APP_CONTROL); // Set app control @@ -402,6 +423,18 @@ EXTAPI int context_trigger_rule_set_action_notification(context_trigger_rule_h r return CONTEXT_TRIGGER_ERROR_INVALID_RULE; } + // Err: App control check + if (app_control) { + char* app_id = NULL; + error = app_control_get_app_id(app_control, &app_id); + IF_FAIL_RETURN_TAG(error == ERR_NONE, error, _E, "Failed to get app id"); + + pkgmgrinfo_appinfo_h app_info; + error = pkgmgrinfo_appinfo_get_appinfo(app_id, &app_info); + g_free(app_id); + IF_FAIL_RETURN_TAG(error == PMINFO_R_OK, CONTEXT_TRIGGER_ERROR_INVALID_RULE, _E, "No such app"); + } + // Set title, content (rule->jrule).set(CT_RULE_DETAILS"."CT_RULE_ACTION, CT_RULE_ACTION_TYPE, CT_RULE_ACTION_TYPE_NOTIFICATION); (rule->jrule).set(CT_RULE_DETAILS"."CT_RULE_ACTION, CT_RULE_ACTION_NOTI_TITLE, title);