1 /*
2 * Copyright (c) 2025 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 "eap_module.h"
17
18 #include "eth_eap_profile.h"
19 #include "netmanager_ext_log.h"
20
21 static constexpr const char *EAP_MODULE_NAME = "net.eap";
22 static constexpr const char *INTERFACE_ETH_METHOD = "EapMethod";
23 static constexpr const char *INTERFACE_PHASE_2_METHOD = "Phase2Method";
24 static constexpr const char *FUNCTION_START_ETH_EAP = "startEthEap";
25 static constexpr const char *FUNCTION_LOGOFF_ETH_EAP = "logOffEthEap";
26
27 namespace OHOS::NetManagerStandard {
28
AddCleanupHook(napi_env env)29 static void AddCleanupHook(napi_env env)
30 {
31 NapiUtils::SetEnvValid(env);
32 auto envWrapper = new (std::nothrow) napi_env;
33 if (envWrapper == nullptr) {
34 NETMANAGER_EXT_LOGE("EnvWrapper create fail!");
35 return;
36 }
37 *envWrapper = env;
38 napi_add_env_cleanup_hook(env, NapiUtils::HookForEnvCleanup, envWrapper);
39 }
40
DeclareEapMethod(napi_env env,napi_value exports)41 void EapModule::DeclareEapMethod(napi_env env, napi_value exports)
42 {
43 napi_value result = NapiUtils::CreateObject(env);
44 NapiUtils::DefineProperties(env, result, {
45 DECLARE_NAPI_STATIC_PROPERTY("EAP_NONE",
46 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_NONE))),
47 DECLARE_NAPI_STATIC_PROPERTY("EAP_PEAP",
48 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_PEAP))),
49 DECLARE_NAPI_STATIC_PROPERTY("EAP_TLS",
50 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_TLS))),
51 DECLARE_NAPI_STATIC_PROPERTY("EAP_TTLS",
52 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_TTLS))),
53 DECLARE_NAPI_STATIC_PROPERTY("EAP_PWD",
54 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_PWD))),
55 DECLARE_NAPI_STATIC_PROPERTY("EAP_SIM",
56 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_SIM))),
57 DECLARE_NAPI_STATIC_PROPERTY("EAP_AKA",
58 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_AKA))),
59 DECLARE_NAPI_STATIC_PROPERTY("EAP_AKA_PRIME",
60 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_AKA_PRIME))),
61 DECLARE_NAPI_STATIC_PROPERTY("EAP_UNAUTH_TLS",
62 NapiUtils::CreateInt32(env, static_cast<int32_t>(EapMethod::EAP_UNAUTH_TLS))),
63 });
64 NapiUtils::SetNamedProperty(env, exports, INTERFACE_ETH_METHOD, result);
65 }
66
DeclarePhase2Method(napi_env env,napi_value exports)67 void EapModule::DeclarePhase2Method(napi_env env, napi_value exports)
68 {
69 napi_value result = NapiUtils::CreateObject(env);
70 NapiUtils::DefineProperties(env, result, {
71 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_NONE",
72 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_NONE))),
73 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_PAP",
74 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_PAP))),
75 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_MSCHAP",
76 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_MSCHAP))),
77 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_MSCHAPV2",
78 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_MSCHAPV2))),
79 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_GTC",
80 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_GTC))),
81 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_SIM",
82 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_SIM))),
83 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_AKA",
84 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_AKA))),
85 DECLARE_NAPI_STATIC_PROPERTY("PHASE2_AKA_PRIME",
86 NapiUtils::CreateInt32(env, static_cast<int32_t>(Phase2Method::PHASE2_AKA_PRIME))),
87 });
88 NapiUtils::SetNamedProperty(env, exports, INTERFACE_PHASE_2_METHOD, result);
89 }
90
InitEapModule(napi_env env,napi_value exports)91 napi_value EapModule::InitEapModule(napi_env env, napi_value exports)
92 {
93 std::initializer_list<napi_property_descriptor> functions = {
94 DECLARE_NAPI_FUNCTION(functionRegCustomEapHandler, RegCustomEapHandler),
95 DECLARE_NAPI_FUNCTION(functionUnregCustomEapHandler, UnRegCustomEapHandler),
96 DECLARE_NAPI_FUNCTION(functionReplyCustomEapData, ReplyCustomEapData),
97 DECLARE_NAPI_FUNCTION(FUNCTION_START_ETH_EAP, StartEthEap),
98 DECLARE_NAPI_FUNCTION(FUNCTION_LOGOFF_ETH_EAP, LogOffEthEap),
99 };
100 NapiUtils::DefineProperties(env, exports, functions);
101 InitProperties(env, exports);
102 DeclareEapMethod(env, exports);
103 DeclarePhase2Method(env, exports);
104 AddCleanupHook(env);
105 return exports;
106 }
107
InitProperties(napi_env env,napi_value exports)108 void EapModule::InitProperties(napi_env env, napi_value exports)
109 {
110 std::initializer_list<napi_property_descriptor> results = {
111 DECLARE_NAPI_STATIC_PROPERTY("RESULT_FAIL",
112 NapiUtils::CreateUint32(env, static_cast<uint32_t>(CustomResult::RESULT_FAIL))),
113 DECLARE_NAPI_STATIC_PROPERTY("RESULT_NEXT",
114 NapiUtils::CreateUint32(env, static_cast<uint32_t>(CustomResult::RESULT_NEXT))),
115 DECLARE_NAPI_STATIC_PROPERTY("RESULT_FINISH",
116 NapiUtils::CreateUint32(env, static_cast<uint32_t>(CustomResult::RESULT_FINISH))),
117 };
118 napi_value customResult = NapiUtils::CreateObject(env);
119 NapiUtils::DefineProperties(env, customResult, results);
120 NapiUtils::SetNamedProperty(env, exports, interfaceNetEapCustomResult, customResult);
121 }
122
123 static napi_module g_eapModule = {
124 .nm_version = 1,
125 .nm_flags = 0,
126 .nm_filename = nullptr,
127 .nm_register_func = EapModule::InitEapModule,
128 .nm_modname = EAP_MODULE_NAME,
129 .nm_priv = nullptr,
130 .reserved = {nullptr},
131 };
132
RegisterEapModule(void)133 extern "C" __attribute__((constructor)) void RegisterEapModule(void)
134 {
135 NETMANAGER_EXT_LOGI("RegisterEapModule success!");
136 napi_module_register(&g_eapModule);
137 }
138 } // namespace OHOS::NetManagerStandard