Modified to restrict service application launch request 16/47716/1
authorSomin Kim <somin926.kim@samsung.com>
Tue, 8 Sep 2015 06:56:54 +0000 (15:56 +0900)
committerSomin Kim <somin926.kim@samsung.com>
Tue, 8 Sep 2015 06:56:54 +0000 (15:56 +0900)
Change-Id: I0fd57efdaaed657b6bb23a4ab2e507c29baf8dd6
Signed-off-by: Somin Kim <somin926.kim@samsung.com>
CMakeLists.txt
include/context_trigger.h
packaging/context.spec
src/context_trigger.cpp

index d8935ad5b19bd78f3450b2ce606118a0fb6f5a33..ed69fdca46dd76f51fa155e8c2f69a5c2b5f56eb 100644 (file)
@@ -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)
index abc61373b6ce69947ae1f3e21c76b8948e014cad..33087c24f794eda4ad1a430954dcba506df3e4b1 100644 (file)
@@ -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);
 
index 35d57461e93fea9e88afe23c28b05a45b56c1582..5e5a1e6b6098132d7046c410329f2b8177c044f7 100644 (file)
@@ -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
index dbf366dd147c09702349cd92573fb766fcc8a258..b050f6825d8bf6fb0457e364a25b762427b8f955 100644 (file)
@@ -24,6 +24,7 @@
 #include <context_trigger.h>
 #include <context_trigger_internal.h>
 #include <context_trigger_types_internal.h>
+#include <pkgmgr-info.h>
 #include <request_handler.h>
 #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);