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/native_api.h" 20 #include "napi/native_common.h" 21 #include "napi/native_node_api.h" 22 #include "napi_edm_common.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 struct AsyncNetworkInfoCallbackInfo : AsyncCallbackInfo { 34 OHOS::AppExecFwk::ElementName elementName; 35 std::string networkInterface; 36 int policyCode = 0; 37 }; 38 39 struct AsyncNetworkInterfacesCallbackInfo : AsyncCallbackInfo { 40 OHOS::AppExecFwk::ElementName elementName; 41 }; 42 43 struct AsyncSetNetworkInterfaceCallbackInfo : AsyncCallbackInfo { 44 OHOS::AppExecFwk::ElementName elementName; 45 std::string networkInterface; 46 bool isDisabled = false; 47 }; 48 49 struct AsyncIptablesCallbackInfo : AsyncCallbackInfo { 50 OHOS::AppExecFwk::ElementName elementName; 51 IPTABLES::AddFilter addFilter; 52 IPTABLES::RemoveFilter removeFilter; 53 }; 54 55 #ifdef NETMANAGER_BASE_EDM_ENABLE 56 struct AsyncHttpProxyCallbackInfo : AsyncCallbackInfo { 57 OHOS::AppExecFwk::ElementName elementName; 58 OHOS::NetManagerStandard::HttpProxy httpProxy; 59 bool hasAdmin = false; 60 }; 61 #endif 62 63 class NetworkManagerAddon { 64 public: 65 static napi_value Init(napi_env env, napi_value exports); 66 67 private: 68 static napi_value GetAllNetworkInterfaces(napi_env env, napi_callback_info info); 69 static napi_value GetIpAddress(napi_env env, napi_callback_info info); 70 static napi_value GetMac(napi_env env, napi_callback_info info); 71 static napi_value GetIpOrMacAddress(napi_env env, napi_callback_info info, int policyCode); 72 static napi_value SetNetworkInterfaceDisabled(napi_env env, napi_callback_info info); 73 static napi_value IsNetworkInterfaceDisabled(napi_env env, napi_callback_info info); 74 static napi_value AddIptablesFilterRule(napi_env env, napi_callback_info info); 75 static napi_value RemoveIptablesFilterRule(napi_env env, napi_callback_info info); 76 static napi_value ListIptablesFilterRules(napi_env env, napi_callback_info info); 77 static napi_value AddFirewallRule(napi_env env, napi_callback_info info); 78 static napi_value RemoveFirewallRule(napi_env env, napi_callback_info info); 79 static napi_value GetFirewallRules(napi_env env, napi_callback_info info); 80 static napi_value AddDomainFilterRule(napi_env env, napi_callback_info info); 81 static napi_value RemoveDomainFilterRule(napi_env env, napi_callback_info info); 82 static napi_value GetDomainFilterRules(napi_env env, napi_callback_info info); 83 static void NativeGetAllNetworkInterfaces(napi_env env, void *data); 84 static void NativeGetIpOrMacAddress(napi_env env, void *data); 85 static void NativeSetNetworkInterfaceDisabled(napi_env env, void *data); 86 static void NativeIsNetworkInterfaceDisabled(napi_env env, void *data); 87 static void NativeAddIptalbsFilterRule(napi_env env, void *data); 88 static void NativeRemoveIptalbsFilterRule(napi_env env, void *data); 89 static void NativeListIptablesFilterRules(napi_env env, void *data); 90 static void CreateFirewallActionObject(napi_env env, napi_value value); 91 static void CreateFirewallProtocolObject(napi_env env, napi_value value); 92 static void CreateFirewallDirectionObject(napi_env env, napi_value value); 93 static void CreateFirewallAddMethodObject(napi_env env, napi_value value); 94 static bool JsObjToAddFirewallObject(napi_env env, napi_value object, IPTABLES::AddFilter &addFilter); 95 static bool JsObjToRemoveFirewallObject(napi_env env, napi_value object, IPTABLES::RemoveFilter &removeFilter); 96 static bool JsObjToFirewallRule(napi_env env, napi_value object, IPTABLES::FirewallRule &rule); 97 static napi_value FirewallRuleToJsObj(napi_env env, const IPTABLES::FirewallRule &rule); 98 static bool JsObjToDomainFilterRule(napi_env env, napi_value object, IPTABLES::DomainFilterRule &rule); 99 static napi_value DomainFilterRuleToJsObj(napi_env env, const IPTABLES::DomainFilterRule &rule); 100 101 static napi_value SetGlobalHttpProxy(napi_env env, napi_callback_info info); 102 static napi_value GetGlobalHttpProxy(napi_env env, napi_callback_info info); 103 #ifdef NETMANAGER_BASE_EDM_ENABLE 104 static bool ParseHttpProxyParam(napi_env env, napi_value argv, NetManagerStandard::HttpProxy &httpProxy); 105 static napi_value ConvertHttpProxyToJS(napi_env env, const OHOS::NetManagerStandard::HttpProxy &httpProxy); 106 static void NativeSetGlobalHttpProxy(napi_env env, void *data); 107 static void NativeGetGlobalHttpProxy(napi_env env, void *data); 108 static void NativeHttpProxyCallbackComplete(napi_env env, napi_status status, void *data); 109 static bool JsObjectToSecureData(napi_env env, napi_value object, const char *paramStr, 110 OHOS::NetManagerStandard::SecureData &secureData); 111 static bool ParseSecureData(napi_env env, OHOS::NetManagerStandard::SecureData &secureData, napi_value object); 112 static bool GetSecureDataFromNAPI(napi_env env, napi_value object, 113 OHOS::NetManagerStandard::SecureData &secureData); 114 #endif 115 static napi_value GetAllNetworkInterfacesSync(napi_env env, napi_callback_info info); 116 static napi_value GetIpAddressSync(napi_env env, napi_callback_info info); 117 static napi_value GetMacSync(napi_env env, napi_callback_info info); 118 static napi_value GetIpOrMacAddressSync(napi_env env, napi_callback_info info, int policyCode); 119 static napi_value SetNetworkInterfaceDisabledSync(napi_env env, napi_callback_info info); 120 static napi_value IsNetworkInterfaceDisabledSync(napi_env env, napi_callback_info info); 121 static napi_value SetGlobalHttpProxySync(napi_env env, napi_callback_info info); 122 static napi_value GetGlobalHttpProxySync(napi_env env, napi_callback_info info); 123 static napi_value SetGlobalHttpProxyForAccountSync(napi_env env, napi_callback_info info); 124 static napi_value GetGlobalHttpProxyForAccountSync(napi_env env, napi_callback_info info); 125 static napi_value GetGlobalHttpProxyCommon(napi_env env, napi_value *argv, size_t argc, bool hasAdmin, 126 OHOS::AppExecFwk::ElementName &elementName, int32_t accountId); 127 }; 128 } // namespace EDM 129 } // namespace OHOS 130 131 #endif // INTERFACES_KITS_NETWORK_MANAGER_INCLUDE_NETWORK_MANAGER_ADDON_H 132