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 #ifndef VPN_CONFIG_UTILS_H
17 #define VPN_CONFIG_UTILS_H
18 
19 #include <cstddef>
20 #include <napi/native_api.h>
21 #include <string>
22 #include <vector>
23 
24 #include "route.h"
25 #include "inet_addr.h"
26 #include "vpn_config.h"
27 #include "ipsecvpn_config.h"
28 #include "l2tpvpn_config.h"
29 
30 namespace OHOS {
31 namespace NetManagerStandard {
32 namespace VpnConfigUtils {
33 constexpr int32_t NET_MASK_MAX_LENGTH = 32;
34 constexpr int32_t IPV6_NET_PREFIX_MAX_LENGTH = 128;
35 constexpr const char *CONFIG_ADDRESSES = "addresses";
36 constexpr const char *CONFIG_ROUTES = "routes";
37 constexpr const char *NET_ADDRESS = "address";
38 constexpr const char *NET_FAMILY = "family";
39 constexpr const char *NET_PORT = "port";
40 constexpr const char *NET_PREFIXLENGTH = "prefixLength";
41 constexpr const char *NET_INTERFACE = "interface";
42 constexpr const char *NET_DESTINATION = "destination";
43 constexpr const char *NET_GATEWAY = "gateway";
44 constexpr const char *NET_HAS_GATEWAY = "hasGateway";
45 constexpr const char *NET_ISDEFAULTROUTE = "isDefaultRoute";
46 constexpr const char *CONFIG_DNSADDRESSES = "dnsAddresses";
47 constexpr const char *CONFIG_SEARCHDOMAINS = "searchDomains";
48 constexpr const char *CONFIG_MTU = "mtu";
49 constexpr const char *CONFIG_ISIPV4ACCEPTED = "isIPv4Accepted";
50 constexpr const char *CONFIG_ISIPV6ACCEPTED = "isIPv6Accepted";
51 constexpr const char *CONFIG_ISLEGACY = "isLegacy";
52 constexpr const char *CONFIG_ISMETERED = "isMetered";
53 constexpr const char *CONFIG_ISBLOCKING = "isBlocking";
54 constexpr const char *CONFIG_TRUSTEDAPPLICATIONS = "trustedApplications";
55 constexpr const char *CONFIG_BLOCKEDAPPLICATIONS = "blockedApplications";
56 
57 constexpr const char *CONFIG_VPN_ID = "vpnId";
58 constexpr const char *CONFIG_VPN_NAME = "vpnName";
59 constexpr const char *CONFIG_VPN_TYPE = "vpnType";
60 constexpr const char *CONFIG_USER_NAME = "userName";
61 constexpr const char *CONFIG_PASSWORD = "password";
62 constexpr const char *CONFIG_SAVE_LOGIN = "saveLogin";
63 constexpr const char *CONFIG_FORWARDED_ROUTES = "forwardingRoutes";
64 
65 constexpr const char *CONFIG_OVPN_PORT = "ovpnPort";
66 constexpr const char *CONFIG_OPEN_VPN_PROTOCOL = "ovpnProtocol";
67 constexpr const char *CONFIG_OPEN_VPN_CFG = "ovpnConfig";
68 constexpr const char *CONFIG_OPEN_VPN_AUTH_TYPE = "ovpnAuthType";
69 constexpr const char *CONFIG_ASKPASS = "askpass";
70 constexpr const char *CONFIG_OPEN_VPN_CFG_FILE_PATH = "ovpnConfigFilePath";
71 constexpr const char *CONFIG_OPEN_VPN_CA_CERT_FILE_PATH = "ovpnCaCertFilePath";
72 constexpr const char *CONFIG_OPEN_VPN_USER_CERT_FILE_PATH = "ovpnUserCertFilePath";
73 constexpr const char *CONFIG_OPEN_VPN_PRIVATE_KEY_FILE_PATH = "ovpnPrivateKeyFilePath";
74 
75 constexpr const char *CONFIG_IPSEC_PRE_SHARE_KEY = "ipsecPreSharedKey";
76 constexpr const char *CONFIG_IPSEC_IDENTIFIER = "ipsecIdentifier";
77 constexpr const char *CONFIG_SWANCTL_CONF = "swanctlConfig";
78 constexpr const char *CONFIG_STRONGSWAN_CONF = "strongSwanConfig";
79 constexpr const char *CONFIG_IPSEC_CA_CERT_CONF = "ipsecCaCertConfig";
80 constexpr const char *CONFIG_IPSEC_PRIVATE_USER_CERT_CONF = "ipsecPrivateUserCertConfig";
81 constexpr const char *CONFIG_IPSEC_PUBLIC_USER_CERT_CONF = "ipsecPublicUserCertConfig";
82 constexpr const char *CONFIG_IPSEC_PRIVATE_SERVER_CERT_CONF = "ipsecPrivateServerCertConfig";
83 constexpr const char *CONFIG_IPSEC_PUBLIC_SERVER_CERT_CONF = "ipsecPublicServerCertConfig";
84 constexpr const char *CONFIG_IPSEC_CA_CERT_FILE_PATH = "ipsecCaCertFilePath";
85 constexpr const char *CONFIG_IPSEC_PRIVATE_USER_CERT_FILE_PATH = "ipsecPrivateUserCertFilePath";
86 constexpr const char *CONFIG_IPSEC_PUBLIC_USER_CERT_FILE_PATH = "ipsecPublicUserCertFilePath";
87 constexpr const char *CONFIG_IPSEC_PRIVATE_SERVER_CERT_FILE_PATH = "ipsecPrivateServerCertFilePath";
88 constexpr const char *CONFIG_IPSEC_PUBLIC_SERVER_CERT_FILE_PATH = "ipsecPublicServerCertFilePath";
89 
90 constexpr const char *CONFIG_IPSEC_CONF = "ipsecConfig";
91 constexpr const char *CONFIG_IPSEC_SECRETS = "ipsecSecrets";
92 constexpr const char *CONFIG_OPTIONS_L2TPD_CLIENT = "optionsL2tpdClient";
93 constexpr const char *CONFIG_XL2TPD_CONF = "xl2tpdConfig";
94 constexpr const char *CONFIG_L2TP_SHARED_KEY = "l2tpSharedKey";
95 
96 bool ParseSysVpnConfig(napi_env env, napi_value *params, sptr<SysVpnConfig> &vpnConfig);
97 bool ParseAddrRouteParams(napi_env env, napi_value config, sptr<SysVpnConfig> &vpnConfig);
98 bool ParseChoiceableParams(napi_env env, napi_value config, sptr<SysVpnConfig> &vpnConfig);
99 
100 bool ParseIpsecVpnParams(napi_env env, napi_value config, sptr<SysVpnConfig> &vpnConfig);
101 bool ParseL2tpVpnParams(napi_env env, napi_value config, sptr<SysVpnConfig> &vpnConfig);
102 
103 bool ParseAddress(napi_env env, napi_value address, struct INetAddr &iNetAddr);
104 bool ParseDestination(napi_env env, napi_value jsRoute, struct INetAddr &iNetAddr);
105 bool ParseGateway(napi_env env, napi_value jsRoute, struct INetAddr &iNetAddr);
106 bool ParseRoute(napi_env env, napi_value jsRoute, Route &route);
107 bool ParseOptionArrayString(napi_env env, napi_value config, const std::string &key,
108     std::vector<std::string> &vector);
109 void GetBoolFromJsOptionItem(napi_env env, napi_value object, const std::string &key, bool &value);
110 void GetUint8FromJsOptionItem(napi_env env, napi_value object, const std::string &key, uint8_t &value);
111 void GetStringFromJsOptionItem(napi_env env, napi_value object, const std::string &key, std::string &value);
112 bool GetStringFromJsMandatoryItem(napi_env env, napi_value object, const std::string &key, std::string &value);
113 void GetInt32FromJsOptionItem(napi_env env, napi_value object, const std::string &key, int32_t &value);
114 
115 napi_value CreateNapiVpnConfig(napi_env env, sptr<SysVpnConfig> &sysVpnConfig);
116 napi_value CreateNapiSysVpnConfig(napi_env env, sptr<SysVpnConfig> &sysVpnConfig);
117 napi_value CreateNapiIpsecVpnConfig(napi_env env, sptr<SysVpnConfig> &sysVpnConfig);
118 napi_value CreateNapiL2tpVpnConfig(napi_env env, sptr<SysVpnConfig> &sysVpnConfig);
119 }
120 } // namespace NetManagerStandard
121 } // namespace OHOS
122 
123 #endif // VPN_CONFIG_UTILS_H
124