1 /*
2 * Copyright (c) 2023 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 server error, please check the server and try again" },
37 { ERR_JS_API_ONLY_FOR_SANDBOX_ERROR, "No permission to invoke this api, it is only for DLP sandbox app" },
38 { ERR_JS_API_NOT_FOR_SANDBOX_ERROR, "No permission to invoke this api, it is not for DLP sandbox app" },
39 { ERR_JS_NOT_DLP_FILE, "Operate invalid DLP file, please use DLP file" },
40 { ERR_JS_OPERATE_DLP_FILE_FAIL, "Operate DLP file fail, please check your permission and try again" },
41 { ERR_JS_DLP_FILE_READ_ONLY, "DLP file is read only, please check your permission" },
42 { ERR_JS_SYSTEM_SERVICE_EXCEPTION, "System service exception, please try again or reboot your device" },
43 { ERR_JS_OUT_OF_MEMORY, "System out of memory, please try again or reboot your device" },
44 { ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED, "System need to be upgraded" },
45 { ERR_JS_APPLICATION_NOT_AUTHORIZED, "Not authorized application" },
46 { ERR_JS_DLP_FILE_EXPIRE_TIME, "DLP file is expiry, please contact the owner" },
47 { ERR_JS_DLP_CREDENTIAL_NO_INTERNET_ERROR, "DLP credential need internet, please check your connection" },
48 { ERR_JS_URI_NOT_EXIST, "Check uri in want" },
49 { ERR_JS_PARAM_DISPLAY_NAME_NOT_EXIST, "Check displayName in want parameters" },
50 { ERR_JS_APPLICATION_NOT_AUTHORIZED, "Application not authorized" },
51 };
52
53 static const std::unordered_map<int32_t, int32_t> NATIVE_CODE_TO_JS_CODE_MAP = {
54 { DLP_OK, ERR_JS_SUCCESS },
55 { DLP_KV_GET_DATA_NOT_FOUND, ERR_JS_SUCCESS },
56
57 // ERR_JS_PERMISSION_DENIED
58 { DLP_SERVICE_ERROR_PERMISSION_DENY, ERR_JS_PERMISSION_DENIED },
59 { DLP_SERVICE_ERROR_NOT_SYSTEM_APP, ERR_JS_NOT_SYSTEM_APP },
60
61 // ERR_JS_INVALID_PARAMETER
62 { DLP_SERVICE_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
63 { DLP_PARSE_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
64 { DLP_PARSE_ERROR_DIGEST_INVALID, ERR_JS_INVALID_PARAMETER },
65 { DLP_PARSE_ERROR_FD_ERROR, ERR_JS_INVALID_PARAMETER },
66 { DLP_PARSE_ERROR_PTR_NULL, ERR_JS_INVALID_PARAMETER },
67 { DLP_PARSE_ERROR_CIPHER_PARAMS_INVALID, ERR_JS_INVALID_PARAMETER },
68 { DLP_PARSE_ERROR_ACCOUNT_INVALID, ERR_JS_INVALID_PARAMETER },
69 { DLP_FUSE_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
70 { DLP_FUSE_ERROR_DLP_FILE_NULL, ERR_JS_INVALID_PARAMETER },
71 { DLP_KV_DATE_INFO_EMPTY_ERROR, ERR_JS_INVALID_PARAMETER },
72
73 // ERR_JS_BEGIN_CREDENTIAL_FAIL
74 { DLP_SERVICE_ERROR_CREDENTIAL_BUSY, ERR_JS_BEGIN_CREDENTIAL_FAIL },
75 { DLP_SERVICE_ERROR_CREDENTIAL_TASK_DUPLICATE, ERR_JS_BEGIN_CREDENTIAL_FAIL },
76
77 // ERR_JS_CREDENTIAL_TIMEOUT
78 { DLP_SERVICE_ERROR_CREDENTIAL_TASK_TIMEOUT, ERR_JS_CREDENTIAL_TIMEOUT },
79 { DLP_CREDENTIAL_ERROR_SERVER_TIME_OUT_ERROR, ERR_JS_CREDENTIAL_TIMEOUT },
80
81 // ERR_JS_CREDENTIAL_SERVICE_ERROR
82 { DLP_CREDENTIAL_ERROR_COMMON_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
83 { DLP_CREDENTIAL_ERROR_HUKS_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
84 { DLP_CREDENTIAL_ERROR_IPC_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
85
86 // ERR_JS_CREDENTIAL_SERVER_ERROR
87 { DLP_CREDENTIAL_ERROR_SERVER_ERROR, ERR_JS_CREDENTIAL_SERVER_ERROR },
88
89 // ERR_JS_ACCOUNT_NOT_LOGIN
90 { DLP_CREDENTIAL_ERROR_NO_ACCOUNT_ERROR, ERR_JS_ACCOUNT_NOT_LOGIN },
91
92 // ERR_JS_USER_NO_PERMISSION
93 { DLP_CREDENTIAL_ERROR_NO_PERMISSION_ERROR, ERR_JS_USER_NO_PERMISSION },
94
95 // ERR_JS_API_ONLY_FOR_SANDBOX_ERROR
96 { DLP_NAPI_ERROR_API_ONLY_FOR_SANDBOX_ERROR, ERR_JS_API_ONLY_FOR_SANDBOX_ERROR },
97 { DLP_SERVICE_ERROR_API_ONLY_FOR_SANDBOX_ERROR, ERR_JS_API_ONLY_FOR_SANDBOX_ERROR },
98
99 // ERR_JS_API_NOT_FOR_SANDBOX_ERROR
100 { DLP_NAPI_ERROR_API_NOT_FOR_SANDBOX_ERROR, ERR_JS_API_NOT_FOR_SANDBOX_ERROR },
101 { DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR, ERR_JS_API_NOT_FOR_SANDBOX_ERROR },
102
103 // ERR_JS_NOT_DLP_FILE
104 { DLP_PARSE_ERROR_FILE_NOT_DLP, ERR_JS_NOT_DLP_FILE },
105 { DLP_PARSE_ERROR_FILE_FORMAT_ERROR, ERR_JS_NOT_DLP_FILE },
106 { DLP_PARSE_ERROR_FILE_VERIFICATION_FAIL, ERR_JS_NOT_DLP_FILE },
107
108 // ERR_JS_OPERATE_DLP_FILE_FAIL
109 { DLP_SERVICE_ERROR_INSTALL_SANDBOX_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
110 { DLP_PARSE_ERROR_TOO_MANY_OPEN_DLP_FILE, ERR_JS_OPERATE_DLP_FILE_FAIL },
111 { DLP_FUSE_ERROR_LINKFILE_EXIST, ERR_JS_OPERATE_DLP_FILE_FAIL },
112 { DLP_SERVICE_ERROR_UNINSTALL_SANDBOX_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
113 { DLP_PARSE_ERROR_FILE_OPERATE_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
114 { DLP_PARSE_ERROR_FILE_LINKING, ERR_JS_OPERATE_DLP_FILE_FAIL },
115 { DLP_PARSE_ERROR_FILE_ALREADY_OPENED, ERR_JS_OPERATE_DLP_FILE_FAIL },
116 { DLP_PARSE_ERROR_FILE_NOT_OPENED, ERR_JS_OPERATE_DLP_FILE_FAIL },
117 { DLP_FUSE_ERROR_LINKFILE_NOT_EXIST, ERR_JS_OPERATE_DLP_FILE_FAIL },
118 { DLP_FUSE_ERROR_TOO_MANY_LINK_FILE, ERR_JS_OPERATE_DLP_FILE_FAIL },
119 { DLP_LINK_FILE_NOT_ALLOW_OPERATE, ERR_JS_OPERATE_DLP_FILE_FAIL },
120
121 // ERR_JS_DLP_FILE_READ_ONLY
122 { DLP_PARSE_ERROR_FILE_READ_ONLY, ERR_JS_DLP_FILE_READ_ONLY },
123
124 // ERR_JS_SYSTEM_SERVICE_EXCEPTION
125 { DLP_NAPI_ERROR_NATIVE_BINDING_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
126 { DLP_SERVICE_ERROR_PARCEL_OPERATE_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
127 { DLP_SERVICE_ERROR_JSON_OPERATE_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
128 { DLP_SERVICE_ERROR_IPC_REQUEST_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
129 { DLP_SERVICE_ERROR_APPOBSERVER_NULL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
130 { DLP_SERVICE_ERROR_APPOBSERVER_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
131 { DLP_SERVICE_ERROR_SERVICE_NOT_EXIST, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
132 { DLP_SERVICE_ERROR_GET_ACCOUNT_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
133 { DLP_PARSE_ERROR_CRYPT_FAIL, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
134 { DLP_PARSE_ERROR_CRYPTO_ENGINE_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
135 { DLP_PARSE_ERROR_OPERATION_UNSUPPORTED, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
136 { DLP_QUERY_DISTRIBUTE_DATA_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
137 { DLP_COMMON_CHECK_KVSTORE_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
138 { DLP_COMMON_DELETE_KEY_FROM_KVSTORE_ERROR, ERR_JS_SYSTEM_SERVICE_EXCEPTION },
139
140 // ERR_JS_OUT_OF_MEMORY
141 { DLP_SERVICE_ERROR_MEMORY_OPERATE_FAIL, ERR_JS_OUT_OF_MEMORY },
142 { DLP_PARSE_ERROR_MEMORY_OPERATE_FAIL, ERR_JS_OUT_OF_MEMORY },
143 { DLP_FUSE_ERROR_MEMORY_OPERATE_FAIL, ERR_JS_OUT_OF_MEMORY },
144
145 // ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED
146 { DLP_PARSE_ERROR_FILE_VERSION_BIGGER_THAN_CURRENT, ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED },
147
148 // ERR_JS_APPLICATION_NOT_AUTHORIZED
149 { DLP_CREDENTIAL_ERROR_APPID_NOT_AUTHORIZED, ERR_JS_APPLICATION_NOT_AUTHORIZED},
150
151 // ERR_JS_DLP_FILE_EXPIRE_TIME
152 { DLP_CREDENTIAL_ERROR_TIME_EXPIRED, ERR_JS_DLP_FILE_EXPIRE_TIME },
153
154 // ERR_JS_DLP_CREDENTIAL_NO_INTERNET_ERROR
155 { DLP_CREDENTIAL_ERROR_NO_INTERNET, ERR_JS_DLP_CREDENTIAL_NO_INTERNET_ERROR },
156 };
157
GetJsErrMsg(int32_t jsErrCode)158 std::string GetJsErrMsg(int32_t jsErrCode)
159 {
160 auto iter = JS_ERROR_MSG_MAP.find(jsErrCode);
161 if (iter != JS_ERROR_MSG_MAP.end()) {
162 return iter->second;
163 }
164 std::string msg = "unkown error, please reboot your device and try again, error=" + std::to_string(jsErrCode);
165 return msg;
166 }
167
NativeCodeToJsCode(int32_t nativeErrCode)168 int32_t NativeCodeToJsCode(int32_t nativeErrCode)
169 {
170 auto iter = NATIVE_CODE_TO_JS_CODE_MAP.find(nativeErrCode);
171 if (iter != NATIVE_CODE_TO_JS_CODE_MAP.end()) {
172 return iter->second;
173 }
174 return ERR_JS_SYSTEM_SERVICE_EXCEPTION;
175 }
176 } // namespace DlpPermission
177 } // namespace Security
178 } // namespace OHOS
179