• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 <napi/native_api.h>
17 #include <napi/native_common.h>
18 
19 #include "add_netfirewall_rule_context.h"
20 #include "delete_netfirewall_rule_context.h"
21 #include "get_all_intercept_records_context.h"
22 #include "get_all_netfirewall_rules_context.h"
23 #include "get_netfirewall_rule_context.h"
24 #include "get_netfirewall_policy_context.h"
25 #include "module_template.h"
26 #include "napi_utils.h"
27 #include "net_firewall_async_work.h"
28 #include "set_netfirewall_policy_context.h"
29 #include "update_netfirewall_rule_context.h"
30 
31 namespace OHOS {
32 namespace NetManagerStandard {
33 namespace {
34 static constexpr const char *FUNCTION_SET_NET_FIREWALL_POLICY = "setNetFirewallPolicy";
35 static constexpr const char *FUNCTION_GET_NET_FIREWALL_POLICY = "getNetFirewallPolicy";
36 static constexpr const char *FUNCTION_ADD_NET_FIREWALL_RULE = "addNetFirewallRule";
37 static constexpr const char *FUNCTION_UPDATE_NET_FIREWALL_RULE = "updateNetFirewallRule";
38 static constexpr const char *FUNCTION_DELETE_NET_FIREWALL_RULE = "removeNetFirewallRule";
39 static constexpr const char *FUNCTION_GET_NET_FIREWALL_RULES = "getNetFirewallRules";
40 static constexpr const char *FUNCTION_GET_NET_FIREWALL_RULE = "getNetFirewallRule";
41 static constexpr const char *FUNCTION_GET_INTERCEPT_RECORDS = "getInterceptRecords";
42 static constexpr const char *ENUM_NETFIREWALLRULEDIRECTION = "NetFirewallRuleDirection";
43 static constexpr const char *NETFIREWALLRULEDIRECTION_RULE_IN = "RULE_IN";
44 static constexpr const char *NETFIREWALLRULEDIRECTION_RULE_OUT = "RULE_OUT";
45 static constexpr const char *ENUM_FIREWALLRULEACTION = "FirewallRuleAction";
46 static constexpr const char *FIREWALLRULEACTION_RULE_ALLOW = "RULE_ALLOW";
47 static constexpr const char *FIREWALLRULEACTION_RULE_DENY = "RULE_DENY";
48 static constexpr const char *ENUM_NETFIREWALLRULETYPE = "NetFirewallRuleType";
49 static constexpr const char *NETFIREWALLRULETYPE_RULE_IP = "RULE_IP";
50 static constexpr const char *NETFIREWALLRULETYPE_RULE_DOMAIN = "RULE_DOMAIN";
51 static constexpr const char *NETFIREWALLRULETYPE_RULE_DNS = "RULE_DNS";
52 static constexpr const char *ENUM_NETFIREWALLORDERFIELD = "NetFirewallOrderField";
53 static constexpr const char *NETFIREWALLORDERFIELD_ORDER_BY_RULE_NAME = "ORDER_BY_RULE_NAME";
54 static constexpr const char *NETFIREWALLORDERFIELD_ORDER_BY_RECORD_TIME = "ORDER_BY_RECORD_TIME";
55 static constexpr const char *ENUM_NETFIREWALLORDERTYPE = "NetFirewallOrderType";
56 static constexpr const char *NETFIREWALLORDERTYPE_ORDER_ASC = "ORDER_ASC";
57 static constexpr const char *NETFIREWALLORDERTYPE_ORDER_DESC = "ORDER_DESC";
58 
SetNetFirewallPolicy(napi_env env,napi_callback_info info)59 napi_value SetNetFirewallPolicy(napi_env env, napi_callback_info info)
60 {
61     return ModuleTemplate::Interface<SetNetFirewallPolicyContext>(env, info, FUNCTION_SET_NET_FIREWALL_POLICY, nullptr,
62         NetFirewallAsyncWork::ExecSetNetFirewallPolicy, NetFirewallAsyncWork::SetNetFirewallPolicyCallback);
63 }
64 
GetNetFirewallPolicy(napi_env env,napi_callback_info info)65 napi_value GetNetFirewallPolicy(napi_env env, napi_callback_info info)
66 {
67     return ModuleTemplate::Interface<GetNetFirewallPolicyContext>(env, info, FUNCTION_GET_NET_FIREWALL_POLICY, nullptr,
68         NetFirewallAsyncWork::ExecGetNetFirewallPolicy, NetFirewallAsyncWork::GetNetFirewallPolicyCallback);
69 }
70 
AddNetFirewallRule(napi_env env,napi_callback_info info)71 napi_value AddNetFirewallRule(napi_env env, napi_callback_info info)
72 {
73     return ModuleTemplate::Interface<AddNetFirewallRuleContext>(env, info, FUNCTION_ADD_NET_FIREWALL_RULE, nullptr,
74         NetFirewallAsyncWork::ExecAddNetFirewallRule, NetFirewallAsyncWork::AddNetFirewallRuleCallback);
75 }
76 
UpdateNetFirewallRule(napi_env env,napi_callback_info info)77 napi_value UpdateNetFirewallRule(napi_env env, napi_callback_info info)
78 {
79     return ModuleTemplate::Interface<UpdateNetFirewallRuleContext>(env, info, FUNCTION_UPDATE_NET_FIREWALL_RULE,
80         nullptr, NetFirewallAsyncWork::ExecUpdateNetFirewallRule, NetFirewallAsyncWork::UpdateNetFirewallRuleCallback);
81 }
82 
DeleteNetFirewallRule(napi_env env,napi_callback_info info)83 napi_value DeleteNetFirewallRule(napi_env env, napi_callback_info info)
84 {
85     return ModuleTemplate::Interface<DeleteNetFirewallRuleContext>(env, info, FUNCTION_DELETE_NET_FIREWALL_RULE,
86         nullptr, NetFirewallAsyncWork::ExecDeleteNetFirewallRule, NetFirewallAsyncWork::DeleteNetFirewallRuleCallback);
87 }
88 
GetNetFirewallRules(napi_env env,napi_callback_info info)89 napi_value GetNetFirewallRules(napi_env env, napi_callback_info info)
90 {
91     return ModuleTemplate::Interface<GetNetFirewallRulesContext>(env, info, FUNCTION_GET_NET_FIREWALL_RULES,
92         nullptr, NetFirewallAsyncWork::ExecGetNetFirewallRules,
93         NetFirewallAsyncWork::GetNetFirewallRulesCallback);
94 }
95 
GetNetFirewallRule(napi_env env,napi_callback_info info)96 napi_value GetNetFirewallRule(napi_env env, napi_callback_info info)
97 {
98     return ModuleTemplate::Interface<GetNetFirewallRuleContext>(env, info, FUNCTION_GET_NET_FIREWALL_RULE, nullptr,
99         NetFirewallAsyncWork::ExecGetNetFirewallRule, NetFirewallAsyncWork::GetNetFirewallRuleCallback);
100 }
101 
GetInterceptRecords(napi_env env,napi_callback_info info)102 napi_value GetInterceptRecords(napi_env env, napi_callback_info info)
103 {
104     return ModuleTemplate::Interface<GetInterceptRecordsContext>(env, info, FUNCTION_GET_INTERCEPT_RECORDS,
105         nullptr, NetFirewallAsyncWork::ExecGetInterceptRecords,
106         NetFirewallAsyncWork::GetInterceptRecordCallbacks);
107 }
108 } // namespace
109 
DeclareNetFirewallInterface(napi_env env,napi_value exports)110 void DeclareNetFirewallInterface(napi_env env, napi_value exports)
111 {
112     NapiUtils::DefineProperties(env, exports,
113         {
114         DECLARE_NAPI_FUNCTION(FUNCTION_SET_NET_FIREWALL_POLICY, SetNetFirewallPolicy),
115         DECLARE_NAPI_FUNCTION(FUNCTION_GET_NET_FIREWALL_POLICY, GetNetFirewallPolicy),
116         DECLARE_NAPI_FUNCTION(FUNCTION_ADD_NET_FIREWALL_RULE, AddNetFirewallRule),
117         DECLARE_NAPI_FUNCTION(FUNCTION_UPDATE_NET_FIREWALL_RULE, UpdateNetFirewallRule),
118         DECLARE_NAPI_FUNCTION(FUNCTION_DELETE_NET_FIREWALL_RULE, DeleteNetFirewallRule),
119         DECLARE_NAPI_FUNCTION(FUNCTION_GET_NET_FIREWALL_RULES, GetNetFirewallRules),
120         DECLARE_NAPI_FUNCTION(FUNCTION_GET_NET_FIREWALL_RULE, GetNetFirewallRule),
121         DECLARE_NAPI_FUNCTION(FUNCTION_GET_INTERCEPT_RECORDS, GetInterceptRecords),
122         });
123     return exports;
124 }
125 
InitNetFirewallRuleDirection(napi_env env,napi_value exports)126 void InitNetFirewallRuleDirection(napi_env env, napi_value exports)
127 {
128     NapiUtils::DefineProperties(env, exports, {
129         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULEDIRECTION_RULE_IN,
130             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleDirection::RULE_IN))),
131         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULEDIRECTION_RULE_OUT,
132             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleDirection::RULE_OUT))),
133     });
134 
135     std::initializer_list<napi_property_descriptor> properties = {
136         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULEDIRECTION_RULE_IN,
137             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleDirection::RULE_IN))),
138         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULEDIRECTION_RULE_OUT,
139             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleDirection::RULE_OUT))),
140     };
141 
142     napi_value netFirewallRuleDirection = NapiUtils::CreateObject(env);
143     NapiUtils::DefineProperties(env, netFirewallRuleDirection, properties);
144     NapiUtils::SetNamedProperty(env, exports, ENUM_NETFIREWALLRULEDIRECTION, netFirewallRuleDirection);
145 }
146 
InitFirewallRuleAction(napi_env env,napi_value exports)147 void InitFirewallRuleAction(napi_env env, napi_value exports)
148 {
149     NapiUtils::DefineProperties(env, exports, {
150         DECLARE_NAPI_STATIC_PROPERTY(FIREWALLRULEACTION_RULE_ALLOW,
151             NapiUtils::CreateUint32(env, static_cast<uint32_t>(FirewallRuleAction::RULE_ALLOW))),
152         DECLARE_NAPI_STATIC_PROPERTY(FIREWALLRULEACTION_RULE_DENY,
153             NapiUtils::CreateUint32(env, static_cast<uint32_t>(FirewallRuleAction::RULE_DENY))),
154     });
155 
156     std::initializer_list<napi_property_descriptor> properties = {
157         DECLARE_NAPI_STATIC_PROPERTY(FIREWALLRULEACTION_RULE_ALLOW,
158             NapiUtils::CreateUint32(env, static_cast<uint32_t>(FirewallRuleAction::RULE_ALLOW))),
159         DECLARE_NAPI_STATIC_PROPERTY(FIREWALLRULEACTION_RULE_DENY,
160             NapiUtils::CreateUint32(env, static_cast<uint32_t>(FirewallRuleAction::RULE_DENY))),
161     };
162 
163     napi_value firewallRuleAction = NapiUtils::CreateObject(env);
164     NapiUtils::DefineProperties(env, firewallRuleAction, properties);
165     NapiUtils::SetNamedProperty(env, exports, ENUM_FIREWALLRULEACTION, firewallRuleAction);
166 }
167 
InitNetFirewallRuleType(napi_env env,napi_value exports)168 void InitNetFirewallRuleType(napi_env env, napi_value exports)
169 {
170     NapiUtils::DefineProperties(env, exports, {
171         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULETYPE_RULE_IP,
172             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleType::RULE_IP))),
173         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULETYPE_RULE_DOMAIN,
174             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleType::RULE_DOMAIN))),
175         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULETYPE_RULE_DNS,
176             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleType::RULE_DNS))),
177     });
178 
179     std::initializer_list<napi_property_descriptor> properties = {
180         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULETYPE_RULE_IP,
181             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleType::RULE_IP))),
182         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULETYPE_RULE_DOMAIN,
183             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleType::RULE_DOMAIN))),
184         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLRULETYPE_RULE_DNS,
185             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallRuleType::RULE_DNS))),
186     };
187 
188     napi_value netFirewallRuleType = NapiUtils::CreateObject(env);
189     NapiUtils::DefineProperties(env, netFirewallRuleType, properties);
190     NapiUtils::SetNamedProperty(env, exports, ENUM_NETFIREWALLRULETYPE, netFirewallRuleType);
191 }
192 
InitNetFirewallOrderField(napi_env env,napi_value exports)193 void InitNetFirewallOrderField(napi_env env, napi_value exports)
194 {
195     NapiUtils::DefineProperties(env, exports, {
196         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERFIELD_ORDER_BY_RULE_NAME,
197             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderField::ORDER_BY_RULE_NAME))),
198         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERFIELD_ORDER_BY_RECORD_TIME,
199             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderField::ORDER_BY_RECORD_TIME))),
200     });
201 
202     std::initializer_list<napi_property_descriptor> properties = {
203         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERFIELD_ORDER_BY_RULE_NAME,
204             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderField::ORDER_BY_RULE_NAME))),
205         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERFIELD_ORDER_BY_RECORD_TIME,
206             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderField::ORDER_BY_RECORD_TIME))),
207     };
208 
209     napi_value netFirewallOrderField = NapiUtils::CreateObject(env);
210     NapiUtils::DefineProperties(env, netFirewallOrderField, properties);
211     NapiUtils::SetNamedProperty(env, exports, ENUM_NETFIREWALLORDERFIELD, netFirewallOrderField);
212 }
213 
InitNetFirewallOrderType(napi_env env,napi_value exports)214 void InitNetFirewallOrderType(napi_env env, napi_value exports)
215 {
216     NapiUtils::DefineProperties(env, exports, {
217         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERTYPE_ORDER_ASC,
218             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderType::ORDER_ASC))),
219         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERTYPE_ORDER_DESC,
220             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderType::ORDER_DESC))),
221     });
222 
223     std::initializer_list<napi_property_descriptor> properties = {
224         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERTYPE_ORDER_ASC,
225             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderType::ORDER_ASC))),
226         DECLARE_NAPI_STATIC_PROPERTY(NETFIREWALLORDERTYPE_ORDER_DESC,
227             NapiUtils::CreateUint32(env, static_cast<uint32_t>(NetFirewallOrderType::ORDER_DESC))),
228     };
229 
230     napi_value netFirewallOrderType = NapiUtils::CreateObject(env);
231     NapiUtils::DefineProperties(env, netFirewallOrderType, properties);
232     NapiUtils::SetNamedProperty(env, exports, ENUM_NETFIREWALLORDERTYPE, netFirewallOrderType);
233 }
234 
DeclareNetFirewallProperties(napi_env env,napi_value exports)235 void DeclareNetFirewallProperties(napi_env env, napi_value exports)
236 {
237     InitNetFirewallRuleDirection(env, exports);
238     InitFirewallRuleAction(env, exports);
239     InitNetFirewallRuleType(env, exports);
240     InitNetFirewallOrderField(env, exports);
241     InitNetFirewallOrderType(env, exports);
242 }
243 
DeclareNetFirewallModule(napi_env env,napi_value exports)244 napi_value DeclareNetFirewallModule(napi_env env, napi_value exports)
245 {
246     DeclareNetFirewallInterface(env, exports);
247     DeclareNetFirewallProperties(env, exports);
248     return exports;
249 }
250 
251 static napi_module g_netfirewallModule = {
252     .nm_version = 1,
253     .nm_flags = 0,
254     .nm_filename = nullptr,
255     .nm_register_func = DeclareNetFirewallModule,
256     .nm_modname = "net.netfirewall",
257     .nm_priv = (0),
258     .reserved = { 0 },
259 };
260 
RegisterNetFirewallModule(void)261 extern "C" __attribute__((constructor)) void RegisterNetFirewallModule(void)
262 {
263     napi_module_register(&g_netfirewallModule);
264 }
265 } // namespace NetManagerStandard
266 } // namespace OHOS
267