2 * Copyright (c) 2014-2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <system_info.h>
25 #include <privilege_db_manager.h>
26 #include <privilege_info.h>
28 #include "privilege_information.h"
32 #define LOG_TAG "PRIVILEGE_INFO"
35 #define PRIVACY_FEATURE "http://tizen.org/feature/security.privacy_privilege"
36 #define CHECK_FEATURE_SUPPORTED(feature_name) \
38 bool is_supported = false; \
39 int ret = system_info_get_platform_bool(feature_name, &is_supported); \
40 if (ret != SYSTEM_INFO_ERROR_NONE) { \
41 LOGE("system_info_get_platform_bool failed. ret = %d", ret); \
42 return PRVINFO_ERROR_INTERNAL_ERROR; \
44 if (!is_supported) { \
45 LOGE("%s is disabled", feature_name); \
46 return PRVINFO_ERROR_NOT_SUPPORTED; \
50 #define TryReturn(condition, expr, returnValue, ...) \
57 #define SAFE_FREE(var) { if (var) { free(var); var = NULL; } }
60 #define PI_API __attribute__((visibility("default")))
63 static int __convert_package_type(const char* package_type_string)
65 if (strcmp(package_type_string, "PRVINFO_PACKAGE_TYPE_WEB") == 0)
66 return PRVMGR_PACKAGE_TYPE_WRT;
67 if (strcmp(package_type_string, "PRVINFO_PACKAGE_TYPE_NATIVE") == 0)
68 return PRVMGR_PACKAGE_TYPE_CORE;
70 return PRVMGR_PACKAGE_TYPE_NONE;
73 static int __convert_return_value(int ret, const char* result)
78 return PRVINFO_ERROR_NO_MATCHING_PRIVILEGE;
79 return PRVINFO_ERROR_NONE;
80 case PRVMGR_ERR_INVALID_PARAMETER:
81 return PRVINFO_ERROR_INVALID_PARAMETER;
82 case PRVMGR_ERR_OUT_OF_MEMORY:
83 return PRVINFO_ERROR_OUT_OF_MEMORY;
84 case PRVMGR_ERR_NO_EXIST_PRIVILEGE:
85 return PRVINFO_ERROR_NO_MATCHING_PRIVILEGE;
86 case PRVMGR_ERR_INTERNAL_ERROR:
88 return PRVINFO_ERROR_INTERNAL_ERROR;
92 static int __convert_result_code(int result)
95 case PRIVILEGE_NOTI_INFO_RESULT_CODE_SUCCESS:
96 return PRIVILEGE_CONSUMER_RETURN_CODE_SUCCESS;
97 case PRIVILEGE_NOTI_INFO_RESULT_CODE_UNKNOWN_LOCALE_CODE:
98 return PRIVILEGE_CONSUMER_RETURN_CODE_UNKNOWN_LOCALE_CODE;
99 case PRIVILEGE_NOTI_INFO_RESULT_CODE_INVALID_PARAMETER:
101 return PRIVILEGE_CONSUMER_RETURN_CODE_INVALID_PARAMETER;
106 int privilege_info_get_display_name(const char *api_version, const char *privilege, char **display_name)
108 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
109 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
111 int ret = privilege_info_get_privilege_display_name(privilege, display_name);
113 return __convert_return_value(ret, *display_name);
117 int privilege_info_get_description(const char *api_version, const char *privilege, char **description)
119 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
120 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
122 int ret = privilege_info_get_privilege_description(privilege, description);
124 return __convert_return_value(ret, *description);
128 int privilege_info_get_display_name_by_pkgtype(const char *package_type, const char *api_version, const char *privilege, char **display_name)
130 TryReturn(package_type != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] package_type is NULL");
131 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
132 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
134 int ret = privilege_info_get_privilege_display_name_by_package_type(privilege, api_version, __convert_package_type(package_type), display_name);
136 return __convert_return_value(ret, *display_name);
140 int privilege_info_get_description_by_pkgtype(const char *package_type, const char *api_version, const char *privilege, char **description)
142 TryReturn(package_type != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] package_type is NULL");
143 TryReturn(api_version != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] api_version is NULL");
144 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
146 int ret = privilege_info_get_privilege_description_by_package_type(privilege, api_version, __convert_package_type(package_type), description);
148 return __convert_return_value(ret, *description);
152 int privilege_info_get_privacy_display_name(const char *privilege, char **privacy_display_name)
154 CHECK_FEATURE_SUPPORTED(PRIVACY_FEATURE);
155 TryReturn(privilege != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege is NULL");
156 TryReturn(privilege_info_has_privacy_attr(privilege) == 1, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege %s does not exist or does not have privacy attribute", privilege);
158 char* privacy_name = NULL;
159 TryReturn(privilege_info_get_privacy_by_privilege(privilege, &privacy_name) == PRVMGR_ERR_NONE && privacy_name != NULL, SAFE_FREE(privacy_name), PRVINFO_ERROR_INTERNAL_ERROR, "[PRVINFO_ERROR_INTERNAL_ERROR] privilege_info_get_privacy_by_privilege() failed. privilege = %s", privilege);
161 int ret = privilege_info_get_privacy_display(privacy_name, privacy_display_name);
162 SAFE_FREE(privacy_name);
164 return __convert_return_value(ret, *privacy_display_name);
168 int privilege_info_get_privilege_info_list(const char* locale, GList* privilege_name_list, GList** privilege_info_list, privilege_consumer_return_code_e* return_result)
170 TryReturn(privilege_name_list != NULL, , PRVINFO_ERROR_INVALID_PARAMETER, "[PRVINFO_ERROR_INVALID_PARAMETER] privilege_name_list is NULL.");
172 privilege_noti_info_result_e result;
173 int ret = privilege_info_get_privilege_noti_info_list(locale, privilege_name_list, privilege_info_list, &result);
174 *return_result = __convert_result_code(result);
176 return __convert_return_value(ret, "");
180 int privilege_info_free_privilege_info_list(GList* privilege_info_list)
182 return __convert_return_value(privilege_info_free_privilege_noti_info_list(privilege_info_list), "");