1 /*
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <unordered_map>
17 #include "dlp_permission.h"
18 #include "napi_error_msg.h"
19
20 namespace OHOS {
21 namespace Security {
22 namespace DlpPermission {
23 static const std::unordered_map<int32_t, std::string> JS_ERROR_MSG_MAP = {
24 // error + message
25 { ERR_JS_SUCCESS, "success" },
26 { ERR_JS_PERMISSION_DENIED, "Permission denied" },
27 { ERR_JS_NOT_SYSTEM_APP, "No permission to invoke this api, it is for system app" },
28 { ERR_JS_PARAMETER_ERROR, "Parameter type error, please check parameter type" },
29 { ERR_JS_CAPABILITY_NOT_SUPPORTED, "Capability is not supported" },
30 { ERR_JS_INVALID_PARAMETER, "Parameter invalid, please check parameter range" },
31 { ERR_JS_BEGIN_CREDENTIAL_FAIL,
32 "Credential encryption or decryption busy, please wait for a moment and try again" },
33 { ERR_JS_CREDENTIAL_TIMEOUT,
34 "Credential encryption or decryption timeout, please wait for a moment and try again" },
35 { ERR_JS_CREDENTIAL_SERVICE_ERROR, "Credential service error, please check the service and try again" },
36 { ERR_JS_CREDENTIAL_SERVER_ERROR, "Credential authentication server error." },
37 { ERR_JS_API_ONLY_FOR_SANDBOX_ERROR,
38 "No permission to call this API, which is available only for DLP sandbox applications." },
39 { ERR_JS_API_NOT_FOR_SANDBOX_ERROR,
40 "No permission to call this API, which is available only for non-DLP sandbox applications." },
41 { ERR_JS_NOT_DLP_FILE, "The file is not a DLP file." },
42 { ERR_JS_OPERATE_DLP_FILE_FAIL, "Failed to operate the DLP file." },
43 { ERR_JS_DLP_FILE_READ_ONLY, "The DLP file is read only." },
44 { ERR_JS_SYSTEM_SERVICE_EXCEPTION, "The system ability works abnormally." },
45 { ERR_JS_OUT_OF_MEMORY, "System out of memory, please try again or reboot your device" },
46 { ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED, "Upgrade required." },
47 { ERR_JS_APPLICATION_NOT_AUTHORIZED, "Not authorized application" },
48 { ERR_JS_DLP_FILE_EXPIRE_TIME, "DLP file is expiry, please contact the owner" },
49 { ERR_JS_DLP_CREDENTIAL_NO_INTERNET_ERROR, "DLP credential need internet, please check your connection" },
50 { ERR_JS_URI_NOT_EXIST, "uri missing in want." },
51 { ERR_JS_PARAM_DISPLAY_NAME_NOT_EXIST, "displayName missing in want." },
52 };
53
54 static const std::unordered_map<int32_t, int32_t> NATIVE_CODE_TO_JS_CODE_MAP = {
55 { DLP_OK, ERR_JS_SUCCESS },
56 { DLP_KV_GET_DATA_NOT_FOUND, ERR_JS_SUCCESS },
57
58 // ERR_JS_PERMISSION_DENIED
59 { DLP_SERVICE_ERROR_PERMISSION_DENY, ERR_JS_PERMISSION_DENIED },
60 { DLP_SERVICE_ERROR_NOT_SYSTEM_APP, ERR_JS_NOT_SYSTEM_APP },
61
62 // ERR_JS_INVALID_PARAMETER
63 { DLP_SERVICE_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
64 { DLP_PARSE_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
65 { DLP_PARSE_ERROR_DIGEST_INVALID, ERR_JS_INVALID_PARAMETER },
66 { DLP_PARSE_ERROR_FD_ERROR, ERR_JS_INVALID_PARAMETER },
67 { DLP_PARSE_ERROR_PTR_NULL, ERR_JS_INVALID_PARAMETER },
68 { DLP_PARSE_ERROR_CIPHER_PARAMS_INVALID, ERR_JS_INVALID_PARAMETER },
69 { DLP_PARSE_ERROR_ACCOUNT_INVALID, ERR_JS_INVALID_PARAMETER },
70 { DLP_FUSE_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
71 { DLP_FUSE_ERROR_DLP_FILE_NULL, ERR_JS_INVALID_PARAMETER },
72 { DLP_KV_DATE_INFO_EMPTY_ERROR, ERR_JS_INVALID_PARAMETER },
73 { DLP_RETENTION_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
74
75 // ERR_JS_BEGIN_CREDENTIAL_FAIL
76 { DLP_SERVICE_ERROR_CREDENTIAL_BUSY, ERR_JS_BEGIN_CREDENTIAL_FAIL },
77 { DLP_SERVICE_ERROR_CREDENTIAL_TASK_DUPLICATE, ERR_JS_BEGIN_CREDENTIAL_FAIL },
78
79 // ERR_JS_CREDENTIAL_TIMEOUT
80 { DLP_SERVICE_ERROR_CREDENTIAL_TASK_TIMEOUT, ERR_JS_CREDENTIAL_TIMEOUT },
81 { DLP_CREDENTIAL_ERROR_SERVER_TIME_OUT_ERROR, ERR_JS_CREDENTIAL_TIMEOUT },
82
83 // ERR_JS_CREDENTIAL_SERVICE_ERROR
84 { DLP_CREDENTIAL_ERROR_COMMON_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
85 { DLP_CREDENTIAL_ERROR_HUKS_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
86 { DLP_CREDENTIAL_ERROR_IPC_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
87
88 // ERR_JS_CREDENTIAL_SERVER_ERROR
89 { DLP_CREDENTIAL_ERROR_SERVER_ERROR, ERR_JS_CREDENTIAL_SERVER_ERROR },
90
91 // ERR_JS_ACCOUNT_NOT_LOGIN
92 { DLP_CREDENTIAL_ERROR_NO_ACCOUNT_ERROR, ERR_JS_ACCOUNT_NOT_LOGIN },
93
94 // ERR_JS_USER_NO_PERMISSION
95 { DLP_CREDENTIAL_ERROR_NO_PERMISSION_ERROR, ERR_JS_USER_NO_PERMISSION },
96
97 // ERR_JS_API_ONLY_FOR_SANDBOX_ERROR
98 { DLP_NAPI_ERROR_API_ONLY_FOR_SANDBOX_ERROR, ERR_JS_API_ONLY_FOR_SANDBOX_ERROR },
99 { DLP_SERVICE_ERROR_API_ONLY_FOR_SANDBOX_ERROR, ERR_JS_API_ONLY_FOR_SANDBOX_ERROR },
100
101 // ERR_JS_API_NOT_FOR_SANDBOX_ERROR
102 { DLP_NAPI_ERROR_API_NOT_FOR_SANDBOX_ERROR, ERR_JS_API_NOT_FOR_SANDBOX_ERROR },
103 { DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR, ERR_JS_API_NOT_FOR_SANDBOX_ERROR },
104
105 // ERR_JS_NOT_DLP_FILE
106 { DLP_PARSE_ERROR_FILE_NOT_DLP, ERR_JS_NOT_DLP_FILE },
107 { DLP_PARSE_ERROR_FILE_FORMAT_ERROR, ERR_JS_NOT_DLP_FILE },
108 { DLP_PARSE_ERROR_FILE_VERIFICATION_FAIL, ERR_JS_NOT_DLP_FILE },
109
110 // ERR_JS_OPERATE_DLP_FILE_FAIL
111 { DLP_SERVICE_ERROR_INSTALL_SANDBOX_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
112 { DLP_PARSE_ERROR_TOO_MANY_OPEN_DLP_FILE, ERR_JS_OPERATE_DLP_FILE_FAIL },
113 { DLP_FUSE_ERROR_LINKFILE_EXIST, ERR_JS_OPERATE_DLP_FILE_FAIL },
114 { DLP_SERVICE_ERROR_UNINSTALL_SANDBOX_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
115 { DLP_PARSE_ERROR_FILE_OPERATE_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
116 { DLP_PARSE_ERROR_FILE_LINKING, ERR_JS_OPERATE_DLP_FILE_FAIL },
117 { DLP_PARSE_ERROR_FILE_ALREADY_OPENED, ERR_JS_OPERATE_DLP_FILE_FAIL },
118 { DLP_PARSE_ERROR_FILE_NOT_OPENED, ERR_JS_OPERATE_DLP_FILE_FAIL },
119 { DLP_FUSE_ERROR_LINKFILE_NOT_EXIST, ERR_JS_OPERATE_DLP_FILE_FAIL },
120 { DLP_FUSE_ERROR_TOO_MANY_LINK_FILE, ERR_JS_OPERATE_DLP_FILE_FAIL },
121 { DLP_LINK_FILE_NOT_ALLOW_OPERATE, ERR_JS_OPERATE_DLP_FILE_FAIL },
122
123 // ERR_JS_DLP_FILE_READ_ONLY
124 { DLP_PARSE_ERROR_FILE_READ_ONLY, ERR_JS_DLP_FILE_READ_ONLY },
125
126 // ERR_JS_SYSTEM_SERVICE_EXCEPTION
127 { DLP_NAPI_ERROR_NATIVE_BINDING_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
128 { DLP_SERVICE_ERROR_PARCEL_OPERATE_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
129 { DLP_SERVICE_ERROR_JSON_OPERATE_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
130 { DLP_SERVICE_ERROR_IPC_REQUEST_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
131 { DLP_SERVICE_ERROR_APPOBSERVER_NULL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
132 { DLP_SERVICE_ERROR_APPOBSERVER_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
133 { DLP_SERVICE_ERROR_SERVICE_NOT_EXIST, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
134 { DLP_SERVICE_ERROR_GET_ACCOUNT_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
135 { DLP_PARSE_ERROR_CRYPT_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
136 { DLP_PARSE_ERROR_CRYPTO_ENGINE_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
137 { DLP_PARSE_ERROR_OPERATION_UNSUPPORTED, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
138 { DLP_QUERY_DISTRIBUTE_DATA_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
139 { DLP_COMMON_CHECK_KVSTORE_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
140 { DLP_COMMON_DELETE_KEY_FROM_KVSTORE_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
141 { DLP_CREDENTIAL_ERROR_VALUE_INVALID, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
142
143 // ERR_JS_OUT_OF_MEMORY
144 { DLP_SERVICE_ERROR_MEMORY_OPERATE_FAIL, ERR_JS_OUT_OF_MEMORY },
145 { DLP_PARSE_ERROR_MEMORY_OPERATE_FAIL, ERR_JS_OUT_OF_MEMORY },
146 { DLP_FUSE_ERROR_MEMORY_OPERATE_FAIL, ERR_JS_OUT_OF_MEMORY },
147
148 // ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED
149 { DLP_PARSE_ERROR_FILE_VERSION_BIGGER_THAN_CURRENT, ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED },
150
151 // ERR_JS_APPLICATION_NOT_AUTHORIZED
152 { DLP_CREDENTIAL_ERROR_APPID_NOT_AUTHORIZED, ERR_JS_APPLICATION_NOT_AUTHORIZED},
153
154 // ERR_JS_DLP_FILE_EXPIRE_TIME
155 { DLP_CREDENTIAL_ERROR_TIME_EXPIRED, ERR_JS_DLP_FILE_EXPIRE_TIME },
156
157 // ERR_JS_DLP_CREDENTIAL_NO_INTERNET_ERROR
158 { DLP_CREDENTIAL_ERROR_NO_INTERNET, ERR_JS_DLP_CREDENTIAL_NO_INTERNET_ERROR },
159 };
160
GetJsErrMsg(int32_t jsErrCode)161 std::string GetJsErrMsg(int32_t jsErrCode)
162 {
163 auto iter = JS_ERROR_MSG_MAP.find(jsErrCode);
164 if (iter != JS_ERROR_MSG_MAP.end()) {
165 return iter->second;
166 }
167 std::string msg = "unkown error, please reboot your device and try again, error=" + std::to_string(jsErrCode);
168 return msg;
169 }
170
NativeCodeToJsCode(int32_t nativeErrCode)171 int32_t NativeCodeToJsCode(int32_t nativeErrCode)
172 {
173 auto iter = NATIVE_CODE_TO_JS_CODE_MAP.find(nativeErrCode);
174 if (iter != NATIVE_CODE_TO_JS_CODE_MAP.end()) {
175 return iter->second;
176 }
177 return ERR_JS_SYSTEM_SERVICE_EXCEPTION;
178 }
179 } // namespace DlpPermission
180 } // namespace Security
181 } // namespace OHOS
182