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