• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 service busy due to too many tasks or duplicate tasks, 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, "The application is not authorized" },
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, "The uri field is missing in the want parameter." },
51     { ERR_JS_PARAM_DISPLAY_NAME_NOT_EXIST, "The displayName field is missing in the want parameter." },
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 
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     { DLP_RETENTION_ERROR_VALUE_INVALID, ERR_JS_INVALID_PARAMETER },
73 
74     // ERR_JS_BEGIN_CREDENTIAL_FAIL
75     { DLP_SERVICE_ERROR_CREDENTIAL_BUSY, ERR_JS_BEGIN_CREDENTIAL_FAIL },
76     { DLP_SERVICE_ERROR_CREDENTIAL_TASK_DUPLICATE, ERR_JS_BEGIN_CREDENTIAL_FAIL },
77 
78     // ERR_JS_CREDENTIAL_TIMEOUT
79     { DLP_SERVICE_ERROR_CREDENTIAL_TASK_TIMEOUT, ERR_JS_CREDENTIAL_TIMEOUT },
80     { DLP_CREDENTIAL_ERROR_SERVER_TIME_OUT_ERROR, ERR_JS_CREDENTIAL_TIMEOUT },
81 
82     // ERR_JS_CREDENTIAL_SERVICE_ERROR
83     { DLP_CREDENTIAL_ERROR_COMMON_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
84     { DLP_CREDENTIAL_ERROR_HUKS_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
85     { DLP_CREDENTIAL_ERROR_IPC_ERROR, ERR_JS_CREDENTIAL_SERVICE_ERROR },
86 
87     // ERR_JS_CREDENTIAL_SERVER_ERROR
88     { DLP_CREDENTIAL_ERROR_SERVER_ERROR, ERR_JS_CREDENTIAL_SERVER_ERROR },
89 
90     // ERR_JS_ACCOUNT_NOT_LOGIN
91     { DLP_CREDENTIAL_ERROR_NO_ACCOUNT_ERROR, ERR_JS_ACCOUNT_NOT_LOGIN },
92 
93     // ERR_JS_USER_NO_PERMISSION
94     { DLP_CREDENTIAL_ERROR_NO_PERMISSION_ERROR, ERR_JS_USER_NO_PERMISSION },
95 
96     // ERR_JS_API_ONLY_FOR_SANDBOX_ERROR
97     { DLP_NAPI_ERROR_API_ONLY_FOR_SANDBOX_ERROR, ERR_JS_API_ONLY_FOR_SANDBOX_ERROR },
98     { DLP_SERVICE_ERROR_API_ONLY_FOR_SANDBOX_ERROR, ERR_JS_API_ONLY_FOR_SANDBOX_ERROR },
99 
100     // ERR_JS_API_NOT_FOR_SANDBOX_ERROR
101     { DLP_NAPI_ERROR_API_NOT_FOR_SANDBOX_ERROR, ERR_JS_API_NOT_FOR_SANDBOX_ERROR },
102     { DLP_SERVICE_ERROR_API_NOT_FOR_SANDBOX_ERROR, ERR_JS_API_NOT_FOR_SANDBOX_ERROR },
103 
104     // ERR_JS_NOT_DLP_FILE
105     { DLP_PARSE_ERROR_FILE_NOT_DLP, ERR_JS_NOT_DLP_FILE },
106     { DLP_PARSE_ERROR_FILE_FORMAT_ERROR, ERR_JS_NOT_DLP_FILE },
107     { DLP_PARSE_ERROR_FILE_VERIFICATION_FAIL, ERR_JS_NOT_DLP_FILE },
108 
109     // ERR_JS_OPERATE_DLP_FILE_FAIL
110     { DLP_SERVICE_ERROR_INSTALL_SANDBOX_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
111     { DLP_PARSE_ERROR_TOO_MANY_OPEN_DLP_FILE, ERR_JS_OPERATE_DLP_FILE_FAIL },
112     { DLP_FUSE_ERROR_LINKFILE_EXIST, ERR_JS_OPERATE_DLP_FILE_FAIL },
113     { DLP_SERVICE_ERROR_UNINSTALL_SANDBOX_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
114     { DLP_PARSE_ERROR_FILE_OPERATE_FAIL, ERR_JS_OPERATE_DLP_FILE_FAIL },
115     { DLP_PARSE_ERROR_FILE_LINKING, ERR_JS_OPERATE_DLP_FILE_FAIL },
116     { DLP_PARSE_ERROR_FILE_ALREADY_OPENED, ERR_JS_OPERATE_DLP_FILE_FAIL },
117     { DLP_PARSE_ERROR_FILE_NOT_OPENED, ERR_JS_OPERATE_DLP_FILE_FAIL },
118     { DLP_FUSE_ERROR_LINKFILE_NOT_EXIST, ERR_JS_OPERATE_DLP_FILE_FAIL },
119     { DLP_FUSE_ERROR_TOO_MANY_LINK_FILE, ERR_JS_OPERATE_DLP_FILE_FAIL },
120     { DLP_LINK_FILE_NOT_ALLOW_OPERATE, ERR_JS_OPERATE_DLP_FILE_FAIL },
121     { DLP_FUSE_ERROR_OPERATE_FAIL, 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     // ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED
161     { DLP_PARSE_ERROR_NOT_SUPPORT_FILE_TYPE, ERR_JS_SYSTEM_NEED_TO_BE_UPGRADED },
162 };
163 
GetJsErrMsg(int32_t jsErrCode)164 std::string GetJsErrMsg(int32_t jsErrCode)
165 {
166     auto iter = JS_ERROR_MSG_MAP.find(jsErrCode);
167     if (iter != JS_ERROR_MSG_MAP.end()) {
168         return iter->second;
169     }
170     std::string msg = "unkown error, please reboot your device and try again, error=" + std::to_string(jsErrCode);
171     return msg;
172 }
173 
NativeCodeToJsCode(int32_t nativeErrCode)174 int32_t NativeCodeToJsCode(int32_t nativeErrCode)
175 {
176     auto iter = NATIVE_CODE_TO_JS_CODE_MAP.find(nativeErrCode);
177     if (iter != NATIVE_CODE_TO_JS_CODE_MAP.end()) {
178         return iter->second;
179     }
180     return ERR_JS_SYSTEM_SERVICE_EXCEPTION;
181 }
182 }  // namespace DlpPermission
183 }  // namespace Security
184 }  // namespace OHOS
185