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 "restrictions_addon.h"
17
18 #include <algorithm>
19 #include <vector>
20
21 #include "edm_constants.h"
22 #include "edm_ipc_interface_code.h"
23 #include "edm_log.h"
24
25 using namespace OHOS::EDM;
26
27 std::unordered_map<std::string, uint32_t> RestrictionsAddon::labelCodeMap = {
28 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_BLUETOOTH, EdmInterfaceCode::DISABLE_BLUETOOTH},
29 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MODIFY_DATETIME, EdmInterfaceCode::DISALLOW_MODIFY_DATETIME},
30 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_PRINTER, EdmInterfaceCode::DISABLED_PRINTER},
31 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_HDC, EdmInterfaceCode::DISABLED_HDC},
32 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MIC, EdmInterfaceCode::DISABLE_MICROPHONE},
33 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_FINGER_PRINT, EdmInterfaceCode::FINGERPRINT_AUTH},
34 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_USB, EdmInterfaceCode::DISABLE_USB},
35 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_WIFI, EdmInterfaceCode::DISABLE_WIFI},
36 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MTP_CLIENT, EdmInterfaceCode::DISABLE_MTP_CLIENT},
37 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MTP_SERVER, EdmInterfaceCode::DISABLE_MTP_SERVER},
38 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SAMBA_CLIENT, EdmInterfaceCode::DISABLE_SAMBA_CLIENT},
39 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SAMBA_SERVER, EdmInterfaceCode::DISABLE_SAMBA_SERVER},
40 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MAINTENANCE_MODE, EdmInterfaceCode::DISABLE_MAINTENANCE_MODE},
41 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_REMOTE_DESK, EdmInterfaceCode::POLICY_CODE_END + 25},
42 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_REMOTE_DIAGNOSIS, EdmInterfaceCode::POLICY_CODE_END + 26},
43 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SCREENSHOT, EdmInterfaceCode::POLICY_CODE_END + 11},
44 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SCREEN_RECORD, EdmInterfaceCode::POLICY_CODE_END + 12},
45 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_DISK_RECOVERY_KEY, EdmInterfaceCode::POLICY_CODE_END + 17},
46 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_NEAR_LINK, EdmInterfaceCode::POLICY_CODE_END + 18},
47 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_TETHERING, EdmInterfaceCode::DISALLOWED_TETHERING},
48 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_INACTIVE_USER_FREEZE, EdmInterfaceCode::INACTIVE_USER_FREEZE},
49 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_CAMERA, EdmInterfaceCode::DISABLE_CAMERA},
50 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_DEVELOPER_MODE, POLICY_CODE_END + 20},
51 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_RESET_FACTORY, POLICY_CODE_END + 21},
52 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_NFC, POLICY_CODE_END + 24},
53 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SMS, EdmInterfaceCode::DISALLOWED_SMS},
54 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MMS, EdmInterfaceCode::DISALLOWED_MMS},
55 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_BACKUP_AND_RESTORE,
56 EdmInterfaceCode::DISABLE_BACKUP_AND_RESTORE},
57 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MOBILE_DATA, EdmInterfaceCode::DISALLOWED_MOBILE_DATA},
58 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_AIRPLANE_MODE, EdmInterfaceCode::DISALLOWED_AIRPLANE_MODE},
59 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_NOTIFICATION, EdmInterfaceCode::DISALLOWED_NOTIFICATION},
60 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_TELEPHONY_CALL, EdmInterfaceCode::DISALLOWED_TELEPHONY_CALL},
61 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_VPN, EdmInterfaceCode::DISALLOW_VPN},
62 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_OTA, POLICY_CODE_END + EdmConstants::PolicyCode::DISABLE_OTA},
63 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_PRIVATE_SPACE, EdmInterfaceCode::DISABLE_PRIVATE_SPACE},
64 };
65
66 std::unordered_map<std::string, uint32_t> RestrictionsAddon::itemCodeMap = {
67 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_APN, EdmInterfaceCode::DISALLOW_MODIFY_APN},
68 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_POWER_LONG_PRESS,
69 EdmInterfaceCode::DISALLOW_POWER_LONG_PRESS},
70 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SET_BIOMETRICS_AND_SCREENLOCK,
71 EdmInterfaceCode::DISABLE_SET_BIOMETRICS_AND_SCREENLOCK},
72 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SET_DEVICE_NAME,
73 EdmInterfaceCode::DISABLE_SET_DEVICE_NAME},
74 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_ETHERNET_IP, EdmInterfaceCode::DISALLOW_MODIFY_ETHERNET_IP},
75 };
76
77 std::unordered_map<std::string, uint32_t> RestrictionsAddon::itemQueryCodeMap = {
78 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SET_BIOMETRICS_AND_SCREENLOCK,
79 EdmInterfaceCode::DISABLE_SET_BIOMETRICS_AND_SCREENLOCK},
80 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SET_DEVICE_NAME,
81 EdmInterfaceCode::DISABLE_SET_DEVICE_NAME},
82 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_ETHERNET_IP, EdmInterfaceCode::DISALLOW_MODIFY_ETHERNET_IP},
83 };
84
85 std::vector<uint32_t> RestrictionsAddon::multiPermCodes = {
86 EdmInterfaceCode::DISABLE_BLUETOOTH,
87 EdmInterfaceCode::DISALLOW_MODIFY_DATETIME,
88 EdmInterfaceCode::DISABLED_PRINTER,
89 EdmInterfaceCode::DISABLED_HDC,
90 EdmInterfaceCode::DISABLE_USB,
91 EdmInterfaceCode::DISABLE_WIFI,
92 };
93
94 std::unordered_map<std::string, uint32_t> RestrictionsAddon::labelCodeMapForAccount = {
95 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_FINGER_PRINT, EdmInterfaceCode::FINGERPRINT_AUTH},
96 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_MTP_CLIENT, EdmInterfaceCode::DISABLE_USER_MTP_CLIENT},
97 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_SUDO, EdmInterfaceCode::DISALLOWED_SUDO},
98 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_DISTRIBUTED_TRANSMISSION,
99 EdmInterfaceCode::DISALLOWED_DISTRIBUTED_TRANSMISSION},
100 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_EXPORT_RECOVERY_KEY,
101 EdmInterfaceCode::DISALLOWED_EXPORT_RECOVERY_KEY},
102 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_USB_STORAGE_DEVICE_WRITE,
103 EdmInterfaceCode::DISALLOWED_USB_STORAGE_DEVICE_WRITE},
104 {EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_PRINT, EdmInterfaceCode::DISABLED_PRINT},
105 };
106
Init(napi_env env,napi_value exports)107 napi_value RestrictionsAddon::Init(napi_env env, napi_value exports)
108 {
109 napi_property_descriptor property[] = {
110 DECLARE_NAPI_FUNCTION("setPrinterDisabled", SetPrinterDisabled),
111 DECLARE_NAPI_FUNCTION("isPrinterDisabled", IsPrinterDisabled),
112 DECLARE_NAPI_FUNCTION("setHdcDisabled", SetHdcDisabled),
113 DECLARE_NAPI_FUNCTION("isHdcDisabled", IsHdcDisabled),
114 DECLARE_NAPI_FUNCTION("disableMicrophone", DisableMicrophone),
115 DECLARE_NAPI_FUNCTION("isMicrophoneDisabled", IsMicrophoneDisabled),
116 DECLARE_NAPI_FUNCTION("setFingerprintAuthDisabled", SetFingerprintAuthDisabled),
117 DECLARE_NAPI_FUNCTION("isFingerprintAuthDisabled", IsFingerprintAuthDisabled),
118 DECLARE_NAPI_FUNCTION("setDisallowedPolicy", SetDisallowedPolicy),
119 DECLARE_NAPI_FUNCTION("getDisallowedPolicy", GetDisallowedPolicy),
120 DECLARE_NAPI_FUNCTION("setDisallowedPolicyForAccount", SetDisallowedPolicyForAccount),
121 DECLARE_NAPI_FUNCTION("getDisallowedPolicyForAccount", GetDisallowedPolicyForAccount),
122 DECLARE_NAPI_FUNCTION("addDisallowedListForAccount", AddDisallowedListForAccount),
123 DECLARE_NAPI_FUNCTION("removeDisallowedListForAccount", RemoveDisallowedListForAccount),
124 DECLARE_NAPI_FUNCTION("getDisallowedListForAccount", GetDisallowedListForAccount),
125 DECLARE_NAPI_FUNCTION("setUserRestriction", SetUserRestriction),
126 DECLARE_NAPI_FUNCTION("getUserRestricted", GetUserRestricted),
127 };
128 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(property) / sizeof(property[0]), property));
129 return exports;
130 }
131
SetPrinterDisabled(napi_env env,napi_callback_info info)132 napi_value RestrictionsAddon::SetPrinterDisabled(napi_env env, napi_callback_info info)
133 {
134 return SetPolicyDisabled(env, info, EdmInterfaceCode::DISABLED_PRINTER);
135 }
136
SetHdcDisabled(napi_env env,napi_callback_info info)137 napi_value RestrictionsAddon::SetHdcDisabled(napi_env env, napi_callback_info info)
138 {
139 return SetPolicyDisabled(env, info, EdmInterfaceCode::DISABLED_HDC);
140 }
141
SetPolicyDisabledCommon(AddonMethodSign & addonMethodSign,int policyCode)142 void RestrictionsAddon::SetPolicyDisabledCommon(AddonMethodSign &addonMethodSign, int policyCode)
143 {
144 addonMethodSign.name = "SetPolicyDisabled";
145 addonMethodSign.argsType = {EdmAddonCommonType::ELEMENT, EdmAddonCommonType::BOOLEAN};
146 addonMethodSign.methodAttribute = MethodAttribute::HANDLE;
147 addonMethodSign.policyCode = policyCode;
148 std::string permissionTag = (std::find(multiPermCodes.begin(), multiPermCodes.end(),
149 policyCode) == multiPermCodes.end()) ? WITHOUT_PERMISSION_TAG : EdmConstants::PERMISSION_TAG_VERSION_11;
150 addonMethodSign.apiVersionTag = permissionTag;
151 }
152
SetPolicyDisabled(napi_env env,napi_callback_info info,int policyCode)153 napi_value RestrictionsAddon::SetPolicyDisabled(napi_env env, napi_callback_info info, int policyCode)
154 {
155 EDMLOGI("NAPI_SetPolicyDisabled called");
156 AddonMethodSign addonMethodSign;
157 SetPolicyDisabledCommon(addonMethodSign, policyCode);
158 return AddonMethodAdapter(env, info, addonMethodSign, NativeSetPolicyDisabled, NativeVoidCallbackComplete);
159 }
160
NativeSetPolicyDisabled(napi_env env,void * data)161 void RestrictionsAddon::NativeSetPolicyDisabled(napi_env env, void *data)
162 {
163 EDMLOGI("NativeSetPolicyDisabled called");
164 if (data == nullptr) {
165 EDMLOGE("data is nullptr");
166 return;
167 }
168 AdapterAddonData *asyncCallbackInfo = static_cast<AdapterAddonData *>(data);
169 asyncCallbackInfo->ret = RestrictionsProxy::GetRestrictionsProxy()->SetDisallowedPolicy(
170 asyncCallbackInfo->data, asyncCallbackInfo->policyCode);
171 }
172
IsPrinterDisabled(napi_env env,napi_callback_info info)173 napi_value RestrictionsAddon::IsPrinterDisabled(napi_env env, napi_callback_info info)
174 {
175 return IsPolicyDisabled(env, info, EdmInterfaceCode::DISABLED_PRINTER);
176 }
177
IsHdcDisabled(napi_env env,napi_callback_info info)178 napi_value RestrictionsAddon::IsHdcDisabled(napi_env env, napi_callback_info info)
179 {
180 return IsPolicyDisabled(env, info, EdmInterfaceCode::DISABLED_HDC);
181 }
182
IsPolicyDisabled(napi_env env,napi_callback_info info,int policyCode)183 napi_value RestrictionsAddon::IsPolicyDisabled(napi_env env, napi_callback_info info, int policyCode)
184 {
185 EDMLOGI("NAPI_IsPolicyDisabled called");
186 size_t argc = ARGS_SIZE_TWO;
187 napi_value argv[ARGS_SIZE_TWO] = {nullptr};
188 napi_value thisArg = nullptr;
189 void *data = nullptr;
190 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
191 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_ONE, "parameter count error");
192 auto asyncCallbackInfo = new (std::nothrow) AsyncRestrictionsCallbackInfo();
193 if (asyncCallbackInfo == nullptr) {
194 return nullptr;
195 }
196 std::unique_ptr<AsyncRestrictionsCallbackInfo> callbackPtr{asyncCallbackInfo};
197 bool matchFlag = false;
198 if (MatchValueType(env, argv[ARR_INDEX_ZERO], napi_null)) {
199 asyncCallbackInfo->hasAdmin = false;
200 matchFlag = true;
201 } else if (MatchValueType(env, argv[ARR_INDEX_ZERO], napi_object)) {
202 matchFlag = true;
203 asyncCallbackInfo->hasAdmin = true;
204 bool ret = ParseElementName(env, asyncCallbackInfo->elementName, argv[ARR_INDEX_ZERO]);
205 ASSERT_AND_THROW_PARAM_ERROR(env, ret, "element name param error");
206 EDMLOGD(
207 "IsPolicyDisabled: asyncCallbackInfo->elementName.bundlename %{public}s, "
208 "asyncCallbackInfo->abilityname:%{public}s",
209 asyncCallbackInfo->elementName.GetBundleName().c_str(),
210 asyncCallbackInfo->elementName.GetAbilityName().c_str());
211 }
212 if (argc > ARGS_SIZE_ONE) {
213 matchFlag = matchFlag && MatchValueType(env, argv[ARR_INDEX_ONE], napi_function);
214 }
215 ASSERT_AND_THROW_PARAM_ERROR(env, matchFlag, "parameter type error");
216 if (argc > ARGS_SIZE_ONE) {
217 EDMLOGD("NAPI_IsPolicyDisabled argc == ARGS_SIZE_TWO");
218 NAPI_CALL(env, napi_create_reference(env, argv[ARR_INDEX_ONE], NAPI_RETURN_ONE, &asyncCallbackInfo->callback));
219 }
220 asyncCallbackInfo->policyCode = policyCode;
221 napi_value asyncWorkReturn =
222 HandleAsyncWork(env, asyncCallbackInfo, "IsPolicyDisabled", NativeIsPolicyDisabled, NativeBoolCallbackComplete);
223 callbackPtr.release();
224 return asyncWorkReturn;
225 }
226
NativeIsPolicyDisabled(napi_env env,void * data)227 void RestrictionsAddon::NativeIsPolicyDisabled(napi_env env, void *data)
228 {
229 EDMLOGI("NativeIsPolicyDisabled called");
230 if (data == nullptr) {
231 EDMLOGE("data is nullptr");
232 return;
233 }
234 AsyncRestrictionsCallbackInfo *asyncCallbackInfo = static_cast<AsyncRestrictionsCallbackInfo *>(data);
235 std::string permissionTag = (std::find(multiPermCodes.begin(), multiPermCodes.end(),
236 asyncCallbackInfo->policyCode) == multiPermCodes.end()) ? WITHOUT_PERMISSION_TAG :
237 EdmConstants::PERMISSION_TAG_VERSION_11;
238 if (asyncCallbackInfo->hasAdmin) {
239 asyncCallbackInfo->ret = RestrictionsProxy::GetRestrictionsProxy()->GetDisallowedPolicy(
240 &(asyncCallbackInfo->elementName), asyncCallbackInfo->policyCode, asyncCallbackInfo->boolRet,
241 permissionTag);
242 } else {
243 asyncCallbackInfo->ret = RestrictionsProxy::GetRestrictionsProxy()->GetDisallowedPolicy(
244 nullptr, asyncCallbackInfo->policyCode, asyncCallbackInfo->boolRet, permissionTag);
245 }
246 }
247
DisableMicrophone(napi_env env,napi_callback_info info)248 napi_value RestrictionsAddon::DisableMicrophone(napi_env env, napi_callback_info info)
249 {
250 return SetPolicyDisabledSync(env, info, EdmInterfaceCode::DISABLE_MICROPHONE);
251 }
252
IsMicrophoneDisabled(napi_env env,napi_callback_info info)253 napi_value RestrictionsAddon::IsMicrophoneDisabled(napi_env env, napi_callback_info info)
254 {
255 return IsPolicyDisabledSync(env, info, EdmInterfaceCode::DISABLE_MICROPHONE);
256 }
257
SetFingerprintAuthDisabled(napi_env env,napi_callback_info info)258 napi_value RestrictionsAddon::SetFingerprintAuthDisabled(napi_env env, napi_callback_info info)
259 {
260 EDMLOGI("SetFingerprintAuthDisabled called");
261 size_t argc = ARGS_SIZE_TWO;
262 napi_value argv[ARGS_SIZE_TWO] = {nullptr};
263 napi_value thisArg = nullptr;
264 void *data = nullptr;
265 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
266 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_TWO, "parameter count error");
267 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ZERO], napi_object), "parameter admin error");
268 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ONE], napi_boolean),
269 "parameter disallow error");
270 OHOS::AppExecFwk::ElementName elementName;
271 ASSERT_AND_THROW_PARAM_ERROR(env, ParseElementName(env, elementName, argv[ARR_INDEX_ZERO]),
272 "element name param error");
273 EDMLOGD("SetFingerprintAuthDisabled: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
274 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
275 bool disallow = false;
276 ASSERT_AND_THROW_PARAM_ERROR(env, ParseBool(env, disallow, argv[ARR_INDEX_ONE]), "parameter disallow parse error");
277
278 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
279 if (proxy == nullptr) {
280 EDMLOGE("can not get RestrictionsProxy");
281 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
282 return nullptr;
283 }
284 ErrCode ret = proxy->SetFingerprintAuthDisabled(elementName, disallow);
285 if (FAILED(ret)) {
286 napi_throw(env, CreateError(env, ret));
287 }
288 return nullptr;
289 }
290
IsFingerprintAuthDisabled(napi_env env,napi_callback_info info)291 napi_value RestrictionsAddon::IsFingerprintAuthDisabled(napi_env env, napi_callback_info info)
292 {
293 EDMLOGI("NAPI_IsFingerprintAuthDisabled called");
294 size_t argc = ARGS_SIZE_ONE;
295 napi_value argv[ARGS_SIZE_ONE] = {nullptr};
296 napi_value thisArg = nullptr;
297 void *data = nullptr;
298 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
299 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_ONE, "parameter count error");
300 bool hasAdmin = false;
301 OHOS::AppExecFwk::ElementName elementName;
302 ASSERT_AND_THROW_PARAM_ERROR(env, CheckGetPolicyAdminParam(env, argv[ARR_INDEX_ZERO], hasAdmin, elementName),
303 "param admin need be null or want");
304 EDMLOGD("IsFingerprintAuthDisabled: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
305 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
306
307 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
308 if (proxy == nullptr) {
309 EDMLOGE("can not get RestrictionsProxy");
310 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
311 return nullptr;
312 }
313 bool disallow = false;
314 ErrCode ret;
315 if (hasAdmin) {
316 ret = proxy->IsFingerprintAuthDisabled(&elementName, disallow);
317 } else {
318 ret = proxy->IsFingerprintAuthDisabled(nullptr, disallow);
319 }
320 if (FAILED(ret)) {
321 napi_throw(env, CreateError(env, ret));
322 return nullptr;
323 }
324 napi_value result = nullptr;
325 NAPI_CALL(env, napi_get_boolean(env, disallow, &result));
326 return result;
327 }
328
SetPolicyDisabledSync(napi_env env,napi_callback_info info,int policyCode)329 napi_value RestrictionsAddon::SetPolicyDisabledSync(napi_env env, napi_callback_info info, int policyCode)
330 {
331 EDMLOGI("NAPI_SetPolicyDisabledSync called");
332 AddonMethodSign addonMethodSign;
333 SetPolicyDisabledCommon(addonMethodSign, policyCode);
334
335 AdapterAddonData adapterAddonData{};
336 if (JsObjectToData(env, info, addonMethodSign, &adapterAddonData) == nullptr) {
337 return nullptr;
338 }
339 ErrCode ret = RestrictionsProxy::GetRestrictionsProxy()->SetDisallowedPolicy(adapterAddonData.data, policyCode);
340 if (FAILED(ret)) {
341 napi_throw(env, CreateError(env, ret));
342 }
343 return nullptr;
344 }
345
IsPolicyDisabledSync(napi_env env,napi_callback_info info,int policyCode)346 napi_value RestrictionsAddon::IsPolicyDisabledSync(napi_env env, napi_callback_info info, int policyCode)
347 {
348 EDMLOGI("NAPI_IsPolicyDisabled called");
349 size_t argc = ARGS_SIZE_ONE;
350 napi_value argv[ARGS_SIZE_ONE] = {nullptr};
351 napi_value thisArg = nullptr;
352 void *data = nullptr;
353 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
354 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_ONE, "parameter count error");
355 bool hasAdmin = false;
356 OHOS::AppExecFwk::ElementName elementName;
357 ASSERT_AND_THROW_PARAM_ERROR(env, CheckGetPolicyAdminParam(env, argv[ARR_INDEX_ZERO], hasAdmin, elementName),
358 "param admin need be null or want");
359 ErrCode ret = ERR_OK;
360 bool boolRet = false;
361 std::string permissionTag = (std::find(multiPermCodes.begin(), multiPermCodes.end(),
362 policyCode) == multiPermCodes.end()) ? WITHOUT_PERMISSION_TAG : EdmConstants::PERMISSION_TAG_VERSION_11;
363 if (hasAdmin) {
364 ret = RestrictionsProxy::GetRestrictionsProxy()->GetDisallowedPolicy(&elementName, policyCode, boolRet,
365 permissionTag);
366 } else {
367 ret = RestrictionsProxy::GetRestrictionsProxy()->GetDisallowedPolicy(nullptr, policyCode, boolRet,
368 permissionTag);
369 }
370 if (FAILED(ret)) {
371 napi_throw(env, CreateError(env, ret));
372 EDMLOGE("SetPolicyDisabledSync failed!");
373 return nullptr;
374 }
375 napi_value result = nullptr;
376 NAPI_CALL(env, napi_get_boolean(env, boolRet, &result));
377 return result;
378 }
379
SetDisallowedPolicy(napi_env env,napi_callback_info info)380 napi_value RestrictionsAddon::SetDisallowedPolicy(napi_env env, napi_callback_info info)
381 {
382 EDMLOGI("NAPI_SetDisallowedPolicy called");
383 size_t argc = ARGS_SIZE_THREE;
384 napi_value argv[ARGS_SIZE_THREE] = {nullptr};
385 napi_value thisArg = nullptr;
386 void *data = nullptr;
387 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
388 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_THREE, "parameter count error");
389 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ZERO], napi_object), "parameter admin error");
390 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ONE], napi_string), "parameter feature error");
391 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_TWO], napi_boolean),
392 "parameter disallow error");
393 OHOS::AppExecFwk::ElementName elementName;
394 ASSERT_AND_THROW_PARAM_ERROR(env, ParseElementName(env, elementName, argv[ARR_INDEX_ZERO]),
395 "element name param error");
396 EDMLOGD("SetDisallowedPolicy: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
397 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
398 std::string feature;
399 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, feature, argv[ARR_INDEX_ONE]), "parameter feature parse error");
400 bool disallow = false;
401 ASSERT_AND_THROW_PARAM_ERROR(env, ParseBool(env, disallow, argv[ARR_INDEX_TWO]), "parameter disallow parse error");
402
403 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
404 if (proxy == nullptr) {
405 EDMLOGE("can not get RestrictionsProxy");
406 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
407 return nullptr;
408 }
409 ErrCode ret = ERR_OK;
410 if (feature == EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_FINGER_PRINT) {
411 ret = proxy->SetFingerprintAuthDisabled(elementName, disallow);
412 } else {
413 auto labelCode = labelCodeMap.find(feature);
414 if (labelCode == labelCodeMap.end()) {
415 napi_throw(env, CreateError(env, EdmReturnErrCode::INTERFACE_UNSUPPORTED));
416 return nullptr;
417 }
418 std::uint32_t ipcCode = labelCode->second;
419 std::string permissionTag = (std::find(multiPermCodes.begin(), multiPermCodes.end(),
420 ipcCode) == multiPermCodes.end()) ? WITHOUT_PERMISSION_TAG : EdmConstants::PERMISSION_TAG_VERSION_12;
421 ret = proxy->SetDisallowedPolicy(elementName, disallow, ipcCode, permissionTag);
422 }
423 if (FAILED(ret)) {
424 napi_throw(env, CreateError(env, ret));
425 }
426 return nullptr;
427 }
428
GetDisallowedPolicy(napi_env env,napi_callback_info info)429 napi_value RestrictionsAddon::GetDisallowedPolicy(napi_env env, napi_callback_info info)
430 {
431 size_t argc = ARGS_SIZE_TWO;
432 napi_value argv[ARGS_SIZE_TWO] = {nullptr};
433 napi_value thisArg = nullptr;
434 void *data = nullptr;
435 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
436 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_TWO, "parameter count error");
437 bool hasAdmin = false;
438 OHOS::AppExecFwk::ElementName elementName;
439 ASSERT_AND_THROW_PARAM_ERROR(env, CheckGetPolicyAdminParam(env, argv[ARR_INDEX_ZERO], hasAdmin, elementName),
440 "param admin need be null or want");
441 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ONE], napi_string), "parameter feature error");
442 std::string feature;
443 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, feature, argv[ARR_INDEX_ONE]), "parameter feature parse error");
444 if (hasAdmin) {
445 EDMLOGD("GetDisallowedPolicy: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
446 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
447 } else {
448 EDMLOGD("GetDisallowedPolicy: elementName is null");
449 }
450
451 bool disallow = false;
452 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
453 if (proxy == nullptr) {
454 EDMLOGE("can not get RestrictionsProxy");
455 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
456 return nullptr;
457 }
458 ErrCode ret = ERR_OK;
459 if (feature == EdmConstants::Restrictions::LABEL_DISALLOWED_POLICY_FINGER_PRINT) {
460 ret = proxy->IsFingerprintAuthDisabled(hasAdmin ? &elementName : nullptr, disallow);
461 } else {
462 auto labelCode = labelCodeMap.find(feature);
463 if (labelCode == labelCodeMap.end()) {
464 napi_throw(env, CreateError(env, EdmReturnErrCode::INTERFACE_UNSUPPORTED));
465 return nullptr;
466 }
467 std::uint32_t ipcCode = labelCode->second;
468 std::string permissionTag = (std::find(multiPermCodes.begin(), multiPermCodes.end(),
469 ipcCode) == multiPermCodes.end()) ? WITHOUT_PERMISSION_TAG : EdmConstants::PERMISSION_TAG_VERSION_12;
470 ret = proxy->GetDisallowedPolicy(hasAdmin ? &elementName : nullptr, ipcCode, disallow, permissionTag);
471 }
472
473 if (FAILED(ret)) {
474 napi_throw(env, CreateError(env, ret));
475 return nullptr;
476 }
477 napi_value result = nullptr;
478 NAPI_CALL(env, napi_get_boolean(env, disallow, &result));
479 return result;
480 }
481
SetDisallowedPolicyForAccount(napi_env env,napi_callback_info info)482 napi_value RestrictionsAddon::SetDisallowedPolicyForAccount(napi_env env, napi_callback_info info)
483 {
484 EDMLOGI("NAPI_SetDisallowedPolicyForAccount called");
485 size_t argc = ARGS_SIZE_FOUR;
486 napi_value argv[ARGS_SIZE_FOUR] = {nullptr};
487 napi_value thisArg = nullptr;
488 void *data = nullptr;
489 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
490 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_FOUR, "parameter count error");
491 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ZERO], napi_object), "parameter admin error");
492 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ONE], napi_string), "parameter feature error");
493 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_TWO], napi_boolean),
494 "parameter disallow error");
495 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_THREE], napi_number),
496 "parameter accountId error");
497 OHOS::AppExecFwk::ElementName elementName;
498 ASSERT_AND_THROW_PARAM_ERROR(env, ParseElementName(env, elementName, argv[ARR_INDEX_ZERO]),
499 "element name param error");
500 EDMLOGD("SetDisallowedPolicy: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
501 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
502 std::string feature;
503 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, feature, argv[ARR_INDEX_ONE]), "parameter feature parse error");
504 bool disallow = false;
505 ASSERT_AND_THROW_PARAM_ERROR(env, ParseBool(env, disallow, argv[ARR_INDEX_TWO]), "parameter disallow parse error");
506 int32_t accountId = -1;
507 ASSERT_AND_THROW_PARAM_ERROR(env, ParseInt(env, accountId, argv[ARR_INDEX_THREE]),
508 "parameter accountId parse error");
509
510 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
511 if (proxy == nullptr) {
512 EDMLOGE("can not get RestrictionsProxy");
513 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
514 return nullptr;
515 }
516 auto labelCode = labelCodeMapForAccount.find(feature);
517 if (labelCode == labelCodeMapForAccount.end()) {
518 napi_throw(env, CreateError(env, EdmReturnErrCode::INTERFACE_UNSUPPORTED));
519 return nullptr;
520 }
521 std::uint32_t ipcCode = labelCode->second;
522 std::string permissionTag = WITHOUT_PERMISSION_TAG;
523 ErrCode ret;
524 if (ipcCode == EdmInterfaceCode::FINGERPRINT_AUTH) {
525 ret = proxy->SetFingerprintAuthDisallowedPolicyForAccount(elementName, disallow,
526 ipcCode, permissionTag, accountId);
527 } else {
528 ret = proxy->SetDisallowedPolicyForAccount(elementName, disallow, ipcCode, permissionTag, accountId);
529 }
530 if (FAILED(ret)) {
531 napi_throw(env, CreateError(env, ret));
532 }
533 return nullptr;
534 }
535
GetDisallowedPolicyForAccount(napi_env env,napi_callback_info info)536 napi_value RestrictionsAddon::GetDisallowedPolicyForAccount(napi_env env, napi_callback_info info)
537 {
538 EDMLOGI("NAPI_GetDisallowedPolicyForAccount called");
539 size_t argc = ARGS_SIZE_THREE;
540 napi_value argv[ARGS_SIZE_THREE] = {nullptr};
541 napi_value thisArg = nullptr;
542 void *data = nullptr;
543 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
544 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_THREE, "parameter count error");
545 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ONE], napi_string), "parameter feature error");
546 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_TWO], napi_number),
547 "parameter accountId error");
548 bool hasAdmin = false;
549 OHOS::AppExecFwk::ElementName elementName;
550 ASSERT_AND_THROW_PARAM_ERROR(env, CheckGetPolicyAdminParam(env, argv[ARR_INDEX_ZERO], hasAdmin, elementName),
551 "param admin need be null or want");
552 EDMLOGD("SetDisallowedPolicy: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
553 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
554 std::string feature;
555 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, feature, argv[ARR_INDEX_ONE]), "parameter feature parse error");
556 int32_t accountId = -1;
557 ASSERT_AND_THROW_PARAM_ERROR(env, ParseInt(env, accountId, argv[ARR_INDEX_TWO]), "parameter accountId parse error");
558
559 auto labelCode = labelCodeMapForAccount.find(feature);
560 if (labelCode == labelCodeMapForAccount.end()) {
561 napi_throw(env, CreateError(env, EdmReturnErrCode::INTERFACE_UNSUPPORTED));
562 return nullptr;
563 }
564 std::uint32_t ipcCode = labelCode->second;
565 bool disallow = false;
566 ErrCode ret = NativeGetDisallowedPolicyForAccount(hasAdmin, elementName, ipcCode, accountId, disallow);
567 if (FAILED(ret)) {
568 napi_throw(env, CreateError(env, ret));
569 return nullptr;
570 }
571 napi_value result = nullptr;
572 NAPI_CALL(env, napi_get_boolean(env, disallow, &result));
573 return result;
574 }
575
NativeGetDisallowedPolicyForAccount(bool hasAdmin,AppExecFwk::ElementName & elementName,std::uint32_t ipcCode,int32_t accountId,bool & disallow)576 OHOS::ErrCode RestrictionsAddon::NativeGetDisallowedPolicyForAccount(bool hasAdmin,
577 AppExecFwk::ElementName &elementName, std::uint32_t ipcCode, int32_t accountId, bool &disallow)
578 {
579 std::string permissionTag = WITHOUT_PERMISSION_TAG;
580 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
581 if (proxy == nullptr) {
582 EDMLOGE("can not get RestrictionsProxy");
583 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
584 }
585 if (ipcCode == EdmInterfaceCode::FINGERPRINT_AUTH) {
586 if (hasAdmin) {
587 return proxy->GetFingerprintAuthDisallowedPolicyForAccount(&elementName, ipcCode,
588 disallow, permissionTag, accountId);
589 } else {
590 return proxy->GetFingerprintAuthDisallowedPolicyForAccount(nullptr, ipcCode,
591 disallow, permissionTag, accountId);
592 }
593 } else {
594 if (!hasAdmin) {
595 return EdmReturnErrCode::PARAM_ERROR;
596 }
597 return proxy->GetDisallowedPolicyForAccount(elementName, ipcCode, disallow, permissionTag, accountId);
598 }
599 }
600
AddDisallowedListForAccount(napi_env env,napi_callback_info info)601 napi_value RestrictionsAddon::AddDisallowedListForAccount(napi_env env, napi_callback_info info)
602 {
603 return AddOrRemoveDisallowedListForAccount(env, info, true);
604 }
605
RemoveDisallowedListForAccount(napi_env env,napi_callback_info info)606 napi_value RestrictionsAddon::RemoveDisallowedListForAccount(napi_env env, napi_callback_info info)
607 {
608 return AddOrRemoveDisallowedListForAccount(env, info, false);
609 }
610
GetDisallowedListForAccount(napi_env env,napi_callback_info info)611 napi_value RestrictionsAddon::GetDisallowedListForAccount(napi_env env, napi_callback_info info)
612 {
613 EDMLOGI("NAPI_GetDisallowedListForAccount called");
614 size_t argc = ARGS_SIZE_THREE;
615 napi_value argv[ARGS_SIZE_THREE] = {nullptr};
616 napi_value thisArg = nullptr;
617 void *data = nullptr;
618 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
619 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_THREE, "parameter count error");
620 OHOS::AppExecFwk::ElementName elementName;
621 ASSERT_AND_THROW_PARAM_ERROR(env, ParseElementName(env, elementName, argv[ARR_INDEX_ZERO]),
622 "param admin need be want");
623 std::string feature;
624 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, feature, argv[ARR_INDEX_ONE]), "parameter feature parse error");
625
626 int32_t accountId = -1;
627 ASSERT_AND_THROW_PARAM_ERROR(env, ParseInt(env, accountId, argv[ARR_INDEX_TWO]), "parameter accountId parse error");
628
629 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
630 if (proxy == nullptr) {
631 EDMLOGE("can not get RestrictionsProxy");
632 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
633 return nullptr;
634 }
635 std::vector<std::string> resultArray;
636 ErrCode ret = proxy->GetDisallowedListForAccount(elementName, feature, accountId, resultArray);
637 if (FAILED(ret)) {
638 napi_throw(env, CreateError(env, ret));
639 return nullptr;
640 }
641 napi_value result = nullptr;
642 NAPI_CALL(env, napi_create_array(env, &result));
643 ConvertStringVectorToJS(env, resultArray, result);
644 return result;
645 }
646
AddOrRemoveDisallowedListForAccount(napi_env env,napi_callback_info info,bool isAdd)647 napi_value RestrictionsAddon::AddOrRemoveDisallowedListForAccount(napi_env env, napi_callback_info info,
648 bool isAdd)
649 {
650 EDMLOGI("NAPI_AddOrRemoveDisallowedListForAccount called");
651 size_t argc = ARGS_SIZE_FOUR;
652 napi_value argv[ARGS_SIZE_FOUR] = {nullptr};
653 napi_value thisArg = nullptr;
654 void *data = nullptr;
655 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
656 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_FOUR, "parameter count error");
657 OHOS::AppExecFwk::ElementName elementName;
658 ASSERT_AND_THROW_PARAM_ERROR(env, ParseElementName(env, elementName, argv[ARR_INDEX_ZERO]),
659 "element name param error");
660 EDMLOGD("SetDisallowedPolicy: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
661 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
662 std::string feature;
663 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, feature, argv[ARR_INDEX_ONE]), "parameter feature parse error");
664 std::vector<std::string> bundleNameArray;
665 ASSERT_AND_THROW_PARAM_ERROR(env, ParseStringArray(env, bundleNameArray, argv[ARR_INDEX_TWO]),
666 "parameter bundle name error");
667 int32_t accountId = 0;
668 ASSERT_AND_THROW_PARAM_ERROR(env, ParseInt(env, accountId, argv[ARR_INDEX_THREE]),
669 "parameter accountId parse error");
670
671 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
672 if (proxy == nullptr) {
673 EDMLOGE("can not get RestrictionsProxy");
674 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
675 return nullptr;
676 }
677 ErrCode ret = proxy->AddOrRemoveDisallowedListForAccount(elementName, feature, bundleNameArray, accountId, isAdd);
678 if (FAILED(ret)) {
679 napi_throw(env, CreateError(env, ret));
680 }
681 return nullptr;
682 }
683
SetUserRestriction(napi_env env,napi_callback_info info)684 napi_value RestrictionsAddon::SetUserRestriction(napi_env env, napi_callback_info info)
685 {
686 EDMLOGI("NAPI_SetUserRestriction called");
687 size_t argc = ARGS_SIZE_THREE;
688 napi_value argv[ARGS_SIZE_THREE] = {nullptr};
689 napi_value thisArg = nullptr;
690 void *data = nullptr;
691 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
692 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_THREE, "parameter count error");
693 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ZERO], napi_object), "parameter admin error");
694 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ONE], napi_string),
695 "parameter settingsItem error");
696 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_TWO], napi_boolean),
697 "parameter disallow error");
698 OHOS::AppExecFwk::ElementName elementName;
699 ASSERT_AND_THROW_PARAM_ERROR(env, ParseElementName(env, elementName, argv[ARR_INDEX_ZERO]),
700 "element name param error");
701 EDMLOGD("SetUserRestriction: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
702 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
703 std::string settingsItem;
704 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, settingsItem, argv[ARR_INDEX_ONE]),
705 "parameter settingsItem parse error");
706 bool disallow = false;
707 ASSERT_AND_THROW_PARAM_ERROR(env, ParseBool(env, disallow, argv[ARR_INDEX_TWO]), "parameter disallow parse error");
708
709 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
710 if (proxy == nullptr) {
711 EDMLOGE("can not get RestrictionsProxy");
712 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
713 return nullptr;
714 }
715 ErrCode ret = ERR_OK;
716 auto itemCode = itemCodeMap.find(settingsItem);
717 if (itemCode == itemCodeMap.end()) {
718 napi_throw(env, CreateError(env, EdmReturnErrCode::INTERFACE_UNSUPPORTED));
719 return nullptr;
720 }
721 std::uint32_t ipcCode = itemCode->second;
722 ret = proxy->SetUserRestriction(elementName, disallow, ipcCode);
723 if (FAILED(ret)) {
724 napi_throw(env, CreateError(env, ret));
725 }
726 return nullptr;
727 }
728
GetUserRestricted(napi_env env,napi_callback_info info)729 napi_value RestrictionsAddon::GetUserRestricted(napi_env env, napi_callback_info info)
730 {
731 EDMLOGI("NAPI_GetUserRestricted called");
732 size_t argc = ARGS_SIZE_TWO;
733 napi_value argv[ARGS_SIZE_TWO] = {nullptr};
734 napi_value thisArg = nullptr;
735 void *data = nullptr;
736 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisArg, &data));
737 ASSERT_AND_THROW_PARAM_ERROR(env, argc >= ARGS_SIZE_TWO, "parameter count error");
738 bool hasAdmin = false;
739 OHOS::AppExecFwk::ElementName elementName;
740 ASSERT_AND_THROW_PARAM_ERROR(env, CheckGetPolicyAdminParam(env, argv[ARR_INDEX_ZERO], hasAdmin, elementName),
741 "param admin need be null or want");
742 ASSERT_AND_THROW_PARAM_ERROR(env, MatchValueType(env, argv[ARR_INDEX_ONE], napi_string),
743 "parameter settingsItem error");
744 std::string settingsItem;
745 ASSERT_AND_THROW_PARAM_ERROR(env, ParseString(env, settingsItem, argv[ARR_INDEX_ONE]),
746 "parameter settingsItem parse error");
747 if (hasAdmin) {
748 EDMLOGD("GetUserRestricted: elementName.bundleName %{public}s, elementName.abilityName:%{public}s",
749 elementName.GetBundleName().c_str(), elementName.GetAbilityName().c_str());
750 } else {
751 EDMLOGD("GetUserRestricted: elementName is null");
752 }
753
754 auto proxy = RestrictionsProxy::GetRestrictionsProxy();
755 if (proxy == nullptr) {
756 EDMLOGE("can not get RestrictionsProxy");
757 napi_throw(env, CreateError(env, EdmReturnErrCode::SYSTEM_ABNORMALLY));
758 return nullptr;
759 }
760
761 auto itemCode = itemQueryCodeMap.find(settingsItem);
762 if (itemCode == itemQueryCodeMap.end()) {
763 napi_throw(env, CreateError(env, EdmReturnErrCode::INTERFACE_UNSUPPORTED));
764 return nullptr;
765 }
766 std::uint32_t ipcCode = itemCode->second;
767
768 bool restricted = false;
769 ErrCode ret = proxy->GetUserRestricted(hasAdmin ? &elementName : nullptr, ipcCode, restricted);
770 if (FAILED(ret)) {
771 napi_throw(env, CreateError(env, ret));
772 return nullptr;
773 }
774 napi_value result = nullptr;
775 NAPI_CALL(env, napi_get_boolean(env, restricted, &result));
776 return result;
777 }
778
779 static napi_module g_restrictionsModule = {
780 .nm_version = 1,
781 .nm_flags = 0,
782 .nm_filename = nullptr,
783 .nm_register_func = RestrictionsAddon::Init,
784 .nm_modname = "enterprise.restrictions",
785 .nm_priv = ((void *)0),
786 .reserved = {0},
787 };
788
RestrictionsRegister()789 extern "C" __attribute__((constructor)) void RestrictionsRegister()
790 {
791 napi_module_register(&g_restrictionsModule);
792 }
793