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 #ifndef INTERFACES_KITS_NETWORK_MANAGER_INCLUDE_NETWORK_MANAGER_ADDON_H 17 #define INTERFACES_KITS_NETWORK_MANAGER_INCLUDE_NETWORK_MANAGER_ADDON_H 18 19 #include "napi_edm_adapter.h" 20 #include "napi/native_api.h" 21 #include "napi/native_common.h" 22 #include "napi/native_node_api.h" 23 #include "napi_edm_error.h" 24 #include "network_manager_proxy.h" 25 #include "want.h" 26 27 #include "domain_filter_rule.h" 28 #include "firewall_rule.h" 29 #include "iptables_utils.h" 30 31 namespace OHOS { 32 namespace EDM { 33 #ifdef NETMANAGER_BASE_EDM_ENABLE 34 struct AsyncHttpProxyCallbackInfo : AsyncCallbackInfo { 35 OHOS::AppExecFwk::ElementName elementName; 36 OHOS::NetManagerStandard::HttpProxy httpProxy; 37 bool hasAdmin = false; 38 }; 39 #endif 40 41 class NetworkManagerAddon { 42 public: 43 static napi_value Init(napi_env env, napi_value exports); 44 45 private: 46 static napi_value GetAllNetworkInterfaces(napi_env env, napi_callback_info info); 47 static napi_value GetIpAddress(napi_env env, napi_callback_info info); 48 static napi_value GetMac(napi_env env, napi_callback_info info); 49 static napi_value GetIpOrMacAddress(napi_env env, napi_callback_info info, int policyCode); 50 static napi_value SetNetworkInterfaceDisabled(napi_env env, napi_callback_info info); 51 static napi_value IsNetworkInterfaceDisabled(napi_env env, napi_callback_info info); 52 static napi_value AddIptablesFilterRule(napi_env env, napi_callback_info info); 53 static napi_value RemoveIptablesFilterRule(napi_env env, napi_callback_info info); 54 static napi_value ListIptablesFilterRules(napi_env env, napi_callback_info info); 55 static napi_value AddFirewallRule(napi_env env, napi_callback_info info); 56 static napi_value RemoveFirewallRule(napi_env env, napi_callback_info info); 57 static napi_value GetFirewallRules(napi_env env, napi_callback_info info); 58 static napi_value AddDomainFilterRule(napi_env env, napi_callback_info info); 59 static napi_value RemoveDomainFilterRule(napi_env env, napi_callback_info info); 60 static napi_value GetDomainFilterRules(napi_env env, napi_callback_info info); 61 static void NativeGetAllNetworkInterfaces(napi_env env, void *data); 62 static void NativeGetIpOrMacAddress(napi_env env, void *data); 63 static void NativeSetNetworkInterfaceDisabled(napi_env env, void *data); 64 static void NativeIsNetworkInterfaceDisabled(napi_env env, void *data); 65 static void NativeAddIptalbsFilterRule(napi_env env, void *data); 66 static void NativeRemoveIptalbsFilterRule(napi_env env, void *data); 67 static void NativeListIptablesFilterRules(napi_env env, void *data); 68 static void CreateFirewallActionObject(napi_env env, napi_value value); 69 static void CreateFirewallProtocolObject(napi_env env, napi_value value); 70 static void CreateFirewallDirectionObject(napi_env env, napi_value value); 71 static void CreateFirewallAddMethodObject(napi_env env, napi_value value); 72 static bool JsObjToAddFirewallObject(napi_env env, napi_value object, IPTABLES::AddFilter &addFilter); 73 static bool JsObjToRemoveFirewallObject(napi_env env, napi_value object, IPTABLES::RemoveFilter &removeFilter); 74 static bool JsObjToFirewallRule(napi_env env, napi_value object, IPTABLES::FirewallRule &rule); 75 static napi_value FirewallRuleToJsObj(napi_env env, const IPTABLES::FirewallRule &rule); 76 static bool JsObjToDomainFilterRule(napi_env env, napi_value object, IPTABLES::DomainFilterRule &rule); 77 static napi_value DomainFilterRuleToJsObj(napi_env env, const IPTABLES::DomainFilterRule &rule); 78 static napi_value SetGlobalHttpProxy(napi_env env, napi_callback_info info); 79 static napi_value GetGlobalHttpProxy(napi_env env, napi_callback_info info); 80 #ifdef NETMANAGER_BASE_EDM_ENABLE 81 static bool ParseHttpProxyParam(napi_env env, napi_value argv, NetManagerStandard::HttpProxy &httpProxy); 82 static napi_value ConvertHttpProxyToJS(napi_env env, const OHOS::NetManagerStandard::HttpProxy &httpProxy); 83 static void NativeSetGlobalHttpProxy(napi_env env, void *data); 84 static void NativeGetGlobalHttpProxy(napi_env env, void *data); 85 static void NativeHttpProxyCallbackComplete(napi_env env, napi_status status, void *data); 86 static bool JsObjectToSecureData(napi_env env, napi_value object, const char *paramStr, 87 OHOS::NetManagerStandard::SecureData &secureData); 88 static bool ParseSecureData(napi_env env, OHOS::NetManagerStandard::SecureData &secureData, napi_value object); 89 static bool GetSecureDataFromNAPI(napi_env env, napi_value object, 90 OHOS::NetManagerStandard::SecureData &secureData); 91 #endif 92 static napi_value GetAllNetworkInterfacesSync(napi_env env, napi_callback_info info); 93 static napi_value GetIpAddressSync(napi_env env, napi_callback_info info); 94 static napi_value GetMacSync(napi_env env, napi_callback_info info); 95 static napi_value GetIpOrMacAddressSync(napi_env env, napi_callback_info info, int policyCode); 96 static napi_value SetNetworkInterfaceDisabledSync(napi_env env, napi_callback_info info); 97 static napi_value IsNetworkInterfaceDisabledSync(napi_env env, napi_callback_info info); 98 static napi_value SetGlobalHttpProxySync(napi_env env, napi_callback_info info); 99 static napi_value GetGlobalHttpProxySync(napi_env env, napi_callback_info info); 100 static napi_value SetGlobalHttpProxyForAccountSync(napi_env env, napi_callback_info info); 101 static napi_value GetGlobalHttpProxyForAccountSync(napi_env env, napi_callback_info info); 102 static napi_value SetGlobalHttpProxyCommonLogic(napi_env env, napi_callback_info info, 103 AddonMethodSign& addonMethodSign); 104 static napi_value GetGlobalHttpProxyCommon(napi_env env, napi_value *argv, size_t argc, bool hasAdmin, 105 OHOS::AppExecFwk::ElementName &elementName, int32_t accountId); 106 static void SetNetworkInterfaceDisabledCommon(AddonMethodSign &addonMethodSign, const std::string &apiVersionTag); 107 static void GetIpOrMacAddressCommon(AddonMethodSign &addonMethodSign, const std::string &apiVersionTag, 108 int32_t policyCode); 109 static void IsNetworkInterfaceDisabledCommon(AddonMethodSign &addonMethodSign, const std::string &apiVersionTag); 110 static void SetGlobalHttpProxyCommon(AddonMethodSign &addonMethodSign); 111 static void SetGlobalHttpProxyCommonForAccount(AddonMethodSign &addonMethodSign); 112 static napi_value TurnOnMobileData(napi_env env, napi_callback_info info); 113 static napi_value TurnOffMobileData(napi_env env, napi_callback_info info); 114 static bool CheckParameters(const std::map<std::string, std::string> ¶meters); 115 static napi_value AddApn(napi_env env, napi_callback_info info); 116 static napi_value DeleteApn(napi_env env, napi_callback_info info); 117 static napi_value UpdateApn(napi_env env, napi_callback_info info); 118 static napi_value SetPreferApn(napi_env env, napi_callback_info info); 119 static napi_value QueryApn(napi_env env, napi_callback_info info); 120 static napi_value QueryApnInfoById(napi_env env, const OHOS::AppExecFwk::ElementName &admin, napi_value param); 121 static napi_value QueryApnIds(napi_env env, const OHOS::AppExecFwk::ElementName &admin, napi_value param); 122 static napi_value ConvertApnInfoToJS(napi_env env, const std::map<std::string, std::string> &apnInfo); 123 }; 124 } // namespace EDM 125 } // namespace OHOS 126 127 #endif // INTERFACES_KITS_NETWORK_MANAGER_INCLUDE_NETWORK_MANAGER_ADDON_H 128