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_WIFI_MANAGER_INCLUDE_WIFI_MANAGER_ADDON_H
17 #define INTERFACES_KITS_WIFI_MANAGER_INCLUDE_WIFI_MANAGER_ADDON_H
18 
19 #include "napi_edm_error.h"
20 #include "napi_edm_common.h"
21 #include "napi/native_common.h"
22 #include "napi/native_node_api.h"
23 #include "napi/native_api.h"
24 #include "want.h"
25 #include "wifi_manager_proxy.h"
26 
27 #ifdef WIFI_EDM_ENABLE
28 #include "wifi_msg.h"
29 #include "wifi_password.h"
30 #endif
31 
32 namespace OHOS {
33 namespace EDM {
34 struct AsyncIsWifiActiveCallbackInfo : AsyncCallbackInfo {
35     OHOS::AppExecFwk::ElementName elementName;
36 };
37 
38 #ifdef WIFI_EDM_ENABLE
39 struct AsyncSetWifiProfileCallbackInfo : AsyncCallbackInfo {
40     OHOS::AppExecFwk::ElementName elementName;
41     OHOS::Wifi::WifiDeviceConfig wifiDeviceConfig;
42     WifiPassword pwd;
43 };
44 #endif
45 
46 enum class IpType {
47     STATIC = 0,
48     DHCP,
49     UNKNOWN,
50 };
51 
52 enum class SecurityType {
53     // Invalid security type.
54     SEC_TYPE_INVALID = 0,
55     // Open.
56     SEC_TYPE_OPEN = 1,
57     // Wired Equivalent Privacy (WEP).
58     SEC_TYPE_WEP = 2,
59     // Pre-shared key (PSK).
60     SEC_TYPE_PSK = 3,
61     // Simultaneous Authentication of Equals (SAE).
62     SEC_TYPE_SAE = 4,
63     // EAP authentication.
64     SEC_TYPE_EAP = 5,
65     // SUITE_B_192 192 bit level.
66     SEC_TYPE_EAP_SUITE_B = 6,
67     // Opportunistic Wireless Encryption.
68     SEC_TYPE_OWE = 7,
69     // WAPI certificate to be specified.
70     SEC_TYPE_WAPI_CERT = 8,
71     // WAPI pre-shared key to be specified.
72     SEC_TYPE_WAPI_PSK = 9,
73 };
74 
75 enum class EapMethod {
76     EAP_NONE = 0,
77     EAP_PEAP = 1,
78     EAP_TLS = 2,
79     EAP_TTLS = 3,
80     EAP_PWD = 4,
81     EAP_SIM = 5,
82     EAP_AKA = 6,
83     EAP_AKA_PRIME = 7,
84     EAP_UNAUTH_TLS = 8,
85 };
86 
87 class WifiManagerAddon {
88 public:
89     WifiManagerAddon() = default;
90     ~WifiManagerAddon() = default;
91 
92     static napi_value Init(napi_env env, napi_value exports);
93 private:
94 #ifdef WIFI_EDM_ENABLE
95     static bool JsObjToDeviceConfig(napi_env env, napi_value object, Wifi::WifiDeviceConfig &config,
96         WifiPassword &pwd);
97     static bool ConvertEncryptionMode(int32_t securityType, Wifi::WifiDeviceConfig &config, WifiPassword &pwd);
98     static bool ProcessIpType(int32_t ipType, napi_env env, napi_value object, Wifi::WifiIpConfig &ipConfig);
99     static bool ConfigStaticIp(napi_env env, napi_value object, Wifi::WifiIpConfig &ipConfig);
100     static bool ProcessEapConfig(napi_env env, napi_value object,
101         Wifi::WifiEapConfig &eapConfig, WifiPassword &pwd);
102     static bool ProcessEapPeapConfig(napi_env env, napi_value object,
103         Wifi::WifiEapConfig &eapConfig, WifiPassword &pwd);
104     static bool ProcessEapTlsConfig(napi_env env, napi_value object, Wifi::WifiEapConfig &eapConfig);
105 #endif
106     static napi_value IsWifiActive(napi_env env, napi_callback_info info);
107     static napi_value SetWifiProfile(napi_env env, napi_callback_info info);
108     static void NativeIsWifiActive(napi_env env, void *data);
109     static void NativeSetWifiProfile(napi_env env, void *data);
110     static void CreateWifiSecurityTypeObject(napi_env env, napi_value value);
111     static void CreateIpTypeObject(napi_env env, napi_value value);
112     static void CreateEapMethodObject(napi_env env, napi_value value);
113     static void CreatePhase2MethodObject(napi_env env, napi_value value);
114     static napi_value SetWifiDisabled(napi_env env, napi_callback_info info);
115     static napi_value IsWifiDisabled(napi_env env, napi_callback_info info);
116     static napi_value IsWifiActiveSync(napi_env env, napi_callback_info info);
117     static napi_value SetWifiProfileSync(napi_env env, napi_callback_info info);
118 };
119 } // namespace EDM
120 } // namespace OHOS
121 
122 #endif // INTERFACES_KITS_WIFI_MANAGER_INCLUDE_WIFI_MANAGER_ADDON_H
123