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 "vpn_data_bean.h"
17 #include "netmgr_ext_log_wrapper.h"
18 #include "net_manager_ext_constants.h"
19 
20 namespace OHOS {
21 namespace NetManagerStandard {
ConvertVpnBeanToSysVpnConfig(sptr<VpnDataBean> & vpnBean)22 sptr<SysVpnConfig> VpnDataBean::ConvertVpnBeanToSysVpnConfig(sptr<VpnDataBean> &vpnBean)
23 {
24     if (vpnBean == nullptr) {
25         NETMGR_EXT_LOG_E("ConvertVpnBeanToSysVpnConfig vpnBean is null");
26         return nullptr;
27     }
28     switch (vpnBean->vpnType_) {
29         case static_cast<int32_t>(VpnType::IKEV2_IPSEC_MSCHAPv2):
30         case static_cast<int32_t>(VpnType::IKEV2_IPSEC_PSK):
31         case static_cast<int32_t>(VpnType::IKEV2_IPSEC_RSA):
32         case static_cast<int32_t>(VpnType::IPSEC_XAUTH_PSK):
33         case static_cast<int32_t>(VpnType::IPSEC_XAUTH_RSA):
34         case static_cast<int32_t>(VpnType::IPSEC_HYBRID_RSA):
35             return ConvertVpnBeanToIpsecVpnConfig(vpnBean);
36         case static_cast<int32_t>(VpnType::L2TP_IPSEC_PSK):
37         case static_cast<int32_t>(VpnType::L2TP_IPSEC_RSA):
38             return ConvertVpnBeanToL2tpVpnConfig(vpnBean);
39         default:
40             NETMGR_EXT_LOG_E("ConvertVpnBeanToSysVpnConfig failed, invalid type=%{public}d", vpnBean->vpnType_);
41             return nullptr;
42     }
43 }
44 
ConvertVpnBeanToIpsecVpnConfig(sptr<VpnDataBean> & vpnBean)45 sptr<IpsecVpnConfig> VpnDataBean::ConvertVpnBeanToIpsecVpnConfig(sptr<VpnDataBean> &vpnBean)
46 {
47     if (vpnBean == nullptr) {
48         NETMGR_EXT_LOG_E("ConvertVpnBeanToIpsecVpnConfig vpnBean is null");
49         return nullptr;
50     }
51     sptr<IpsecVpnConfig> ipsecVpnConfig = new (std::nothrow) IpsecVpnConfig();
52     if (ipsecVpnConfig == nullptr) {
53         NETMGR_EXT_LOG_E("ConvertVpnBeanToIpsecVpnConfig ipsecVpnConfig is null");
54         return nullptr;
55     }
56     ipsecVpnConfig->vpnId_ = vpnBean->vpnId_;
57     ipsecVpnConfig->vpnName_ = vpnBean->vpnName_;
58     ipsecVpnConfig->vpnType_ = vpnBean->vpnType_;
59     sptr<INetAddr> netAddr = new (std::nothrow) INetAddr();
60     netAddr->address_ = vpnBean->vpnAddress_;
61     ipsecVpnConfig->addresses_.push_back(*netAddr);
62     ipsecVpnConfig->userName_ = vpnBean->userName_;
63     ipsecVpnConfig->password_ = vpnBean->password_;
64     ipsecVpnConfig->userId_ = vpnBean->userId_;
65     ipsecVpnConfig->isLegacy_ = (vpnBean->isLegacy_) == 1;
66     ipsecVpnConfig->saveLogin_ = (vpnBean->saveLogin_) == 1;
67     ipsecVpnConfig->forwardingRoutes_ = vpnBean->forwardingRoutes_;
68     ipsecVpnConfig->dnsAddresses_.push_back(vpnBean->dnsAddresses_);
69     ipsecVpnConfig->searchDomains_.push_back(vpnBean->searchDomains_);
70 
71     ipsecVpnConfig->ipsecPreSharedKey_ = vpnBean->ipsecPreSharedKey_;
72     ipsecVpnConfig->ipsecIdentifier_ = vpnBean->ipsecIdentifier_;
73     ipsecVpnConfig->swanctlConf_ = vpnBean->swanctlConf_;
74     ipsecVpnConfig->strongswanConf_ = vpnBean->strongswanConf_;
75     ipsecVpnConfig->ipsecCaCertConf_ = vpnBean->ipsecCaCertConf_;
76     ipsecVpnConfig->ipsecPrivateUserCertConf_ = vpnBean->ipsecPrivateUserCertConf_;
77     ipsecVpnConfig->ipsecPublicUserCertConf_ = vpnBean->ipsecPublicUserCertConf_;
78     ipsecVpnConfig->ipsecPrivateServerCertConf_ = vpnBean->ipsecPrivateServerCertConf_;
79     ipsecVpnConfig->ipsecPublicServerCertConf_ = vpnBean->ipsecPublicServerCertConf_;
80     ipsecVpnConfig->ipsecCaCertFilePath_ = vpnBean->ipsecCaCertFilePath_;
81     ipsecVpnConfig->ipsecPrivateUserCertFilePath_ = vpnBean->ipsecPrivateUserCertFilePath_;
82     ipsecVpnConfig->ipsecPublicUserCertFilePath_ = vpnBean->ipsecPublicUserCertFilePath_;
83     ipsecVpnConfig->ipsecPrivateServerCertFilePath_ = vpnBean->ipsecPrivateServerCertFilePath_;
84     ipsecVpnConfig->ipsecPublicServerCertFilePath_ = vpnBean->ipsecPublicServerCertFilePath_;
85 
86     return ipsecVpnConfig;
87 }
88 
ConvertVpnBeanToL2tpVpnConfig(sptr<VpnDataBean> & vpnBean)89 sptr<L2tpVpnConfig> VpnDataBean::ConvertVpnBeanToL2tpVpnConfig(sptr<VpnDataBean> &vpnBean)
90 {
91     if (vpnBean == nullptr) {
92         NETMGR_EXT_LOG_E("ConvertVpnBeanToL2tpVpnConfig vpnBean is null");
93         return nullptr;
94     }
95     sptr<L2tpVpnConfig> l2tpVpnConfig = new (std::nothrow) L2tpVpnConfig();
96     if (l2tpVpnConfig == nullptr) {
97         NETMGR_EXT_LOG_E("ConvertVpnBeanToL2tpVpnConfig l2tpVpnConfig is null");
98         return nullptr;
99     }
100     l2tpVpnConfig->vpnId_ = vpnBean->vpnId_;
101     l2tpVpnConfig->vpnName_ = vpnBean->vpnName_;
102     l2tpVpnConfig->vpnType_ = vpnBean->vpnType_;
103     sptr<INetAddr> netAddr = new (std::nothrow) INetAddr();
104     netAddr->address_ = vpnBean->vpnAddress_;
105     l2tpVpnConfig->addresses_.push_back(*netAddr);
106     l2tpVpnConfig->userName_ = vpnBean->userName_;
107     l2tpVpnConfig->password_ = vpnBean->password_;
108     l2tpVpnConfig->userId_ = vpnBean->userId_;
109     l2tpVpnConfig->isLegacy_ = (vpnBean->isLegacy_) == 1;
110     l2tpVpnConfig->saveLogin_ = (vpnBean->saveLogin_) == 1;
111     l2tpVpnConfig->forwardingRoutes_ = vpnBean->forwardingRoutes_;
112     l2tpVpnConfig->dnsAddresses_.push_back(vpnBean->dnsAddresses_);
113     l2tpVpnConfig->searchDomains_.push_back(vpnBean->searchDomains_);
114 
115     l2tpVpnConfig->ipsecPreSharedKey_ = vpnBean->ipsecPreSharedKey_;
116     l2tpVpnConfig->ipsecIdentifier_ = vpnBean->ipsecIdentifier_;
117     l2tpVpnConfig->strongswanConf_ = vpnBean->strongswanConf_;
118     l2tpVpnConfig->ipsecCaCertConf_ = vpnBean->ipsecCaCertConf_;
119     l2tpVpnConfig->ipsecPrivateUserCertConf_ = vpnBean->ipsecPrivateUserCertConf_;
120     l2tpVpnConfig->ipsecPublicUserCertConf_ = vpnBean->ipsecPublicUserCertConf_;
121     l2tpVpnConfig->ipsecPrivateServerCertConf_ = vpnBean->ipsecPrivateServerCertConf_;
122     l2tpVpnConfig->ipsecPublicServerCertConf_ = vpnBean->ipsecPublicServerCertConf_;
123     l2tpVpnConfig->ipsecCaCertFilePath_ = vpnBean->ipsecCaCertFilePath_;
124     l2tpVpnConfig->ipsecPrivateUserCertFilePath_ = vpnBean->ipsecPrivateUserCertFilePath_;
125     l2tpVpnConfig->ipsecPublicUserCertFilePath_ = vpnBean->ipsecPublicUserCertFilePath_;
126     l2tpVpnConfig->ipsecPrivateServerCertFilePath_ = vpnBean->ipsecPrivateServerCertFilePath_;
127     l2tpVpnConfig->ipsecPublicServerCertFilePath_ = vpnBean->ipsecPublicServerCertFilePath_;
128 
129     l2tpVpnConfig->ipsecConf_ = vpnBean->ipsecConf_;
130     l2tpVpnConfig->ipsecSecrets_ = vpnBean->ipsecSecrets_;
131     l2tpVpnConfig->optionsL2tpdClient_ = vpnBean->optionsL2tpdClient_;
132     l2tpVpnConfig->xl2tpdConf_ = vpnBean->xl2tpdConf_;
133     l2tpVpnConfig->l2tpSharedKey_ = vpnBean->l2tpSharedKey_;
134 
135     return l2tpVpnConfig;
136 }
137 
ConvertSysVpnConfigToVpnBean(sptr<SysVpnConfig> & sysVpnConfig)138 sptr<VpnDataBean> VpnDataBean::ConvertSysVpnConfigToVpnBean(sptr<SysVpnConfig> &sysVpnConfig)
139 {
140     if (sysVpnConfig == nullptr) {
141         NETMGR_EXT_LOG_E("ConvertSysVpnConfigToVpnBean sysVpnConfig is null");
142         return nullptr;
143     }
144     sptr<VpnDataBean> vpnBean = new (std::nothrow) VpnDataBean();
145     if (vpnBean == nullptr) {
146         NETMGR_EXT_LOG_E("ConvertSysVpnConfigToVpnBean vpnBean is null");
147         return nullptr;
148     }
149     ConvertCommonVpnConfigToVpnBean(sysVpnConfig, vpnBean);
150     sptr<IpsecVpnConfig> ipsecVpnConfig;
151     sptr<L2tpVpnConfig> l2tpVpnConfig;
152     switch (sysVpnConfig->vpnType_) {
153         case static_cast<int32_t>(VpnType::IKEV2_IPSEC_MSCHAPv2):
154         case static_cast<int32_t>(VpnType::IKEV2_IPSEC_PSK):
155         case static_cast<int32_t>(VpnType::IKEV2_IPSEC_RSA):
156         case static_cast<int32_t>(VpnType::IPSEC_XAUTH_PSK):
157         case static_cast<int32_t>(VpnType::IPSEC_XAUTH_RSA):
158         case static_cast<int32_t>(VpnType::IPSEC_HYBRID_RSA):
159             ipsecVpnConfig = sptr<IpsecVpnConfig>(static_cast<IpsecVpnConfig *>(sysVpnConfig.GetRefPtr()));
160             ConvertIpsecVpnConfigToVpnBean(ipsecVpnConfig, vpnBean);
161             break;
162         case static_cast<int32_t>(VpnType::L2TP_IPSEC_PSK):
163         case static_cast<int32_t>(VpnType::L2TP_IPSEC_RSA):
164             l2tpVpnConfig = sptr<L2tpVpnConfig>(static_cast<L2tpVpnConfig *>(sysVpnConfig.GetRefPtr()));
165             ConvertL2tpVpnConfigToVpnBean(l2tpVpnConfig, vpnBean);
166             break;
167         default:
168             NETMGR_EXT_LOG_E("ConvertSysVpnConfigToVpnBean proxy vpn type is error");
169             break;
170     }
171     return vpnBean;
172 }
173 
ConvertCommonVpnConfigToVpnBean(sptr<SysVpnConfig> & sysVpnConfig,sptr<VpnDataBean> & vpnBean)174 void VpnDataBean::ConvertCommonVpnConfigToVpnBean(sptr<SysVpnConfig> &sysVpnConfig, sptr<VpnDataBean> &vpnBean)
175 {
176     if (vpnBean == nullptr || sysVpnConfig == nullptr) {
177         NETMGR_EXT_LOG_E("ConvertCommonVpnConfigToVpnBean params is null");
178         return;
179     }
180     vpnBean->vpnId_ = sysVpnConfig->vpnId_;
181     vpnBean->vpnName_ = sysVpnConfig->vpnName_;
182     vpnBean->vpnType_ = sysVpnConfig->vpnType_;
183     std::vector<INetAddr> addresses = sysVpnConfig->addresses_;
184     if (!addresses.empty()) {
185         vpnBean->vpnAddress_ = addresses[0].address_;
186     }
187     vpnBean->userName_ = sysVpnConfig->userName_;
188     vpnBean->password_ = sysVpnConfig->password_;
189     vpnBean->userId_ = sysVpnConfig->userId_;
190     vpnBean->isLegacy_ = sysVpnConfig->isLegacy_ ? 1 : 0;
191     vpnBean->saveLogin_ = sysVpnConfig->saveLogin_ ? 1 : 0;
192     vpnBean->forwardingRoutes_ = sysVpnConfig->forwardingRoutes_;
193     std::vector<std::string> dnsAddresses = sysVpnConfig->dnsAddresses_;
194     if (!dnsAddresses.empty()) {
195         vpnBean->dnsAddresses_ = dnsAddresses[0];
196     }
197     std::vector<std::string> searchDomains = sysVpnConfig->searchDomains_;
198     if (!searchDomains.empty()) {
199         vpnBean->searchDomains_ = searchDomains[0];
200     }
201 }
ConvertIpsecVpnConfigToVpnBean(sptr<IpsecVpnConfig> & ipsecVpnConfig,sptr<VpnDataBean> & vpnBean)202 void VpnDataBean::ConvertIpsecVpnConfigToVpnBean(sptr<IpsecVpnConfig> &ipsecVpnConfig, sptr<VpnDataBean> &vpnBean)
203 {
204     if (vpnBean == nullptr || ipsecVpnConfig == nullptr) {
205         NETMGR_EXT_LOG_E("ConvertIpsecVpnConfigToVpnBean params is null");
206         return;
207     }
208     vpnBean->ipsecPreSharedKey_ = ipsecVpnConfig->ipsecPreSharedKey_;
209     vpnBean->ipsecIdentifier_ = ipsecVpnConfig->ipsecIdentifier_;
210     vpnBean->swanctlConf_ = ipsecVpnConfig->swanctlConf_;
211     vpnBean->strongswanConf_ = ipsecVpnConfig->strongswanConf_;
212     vpnBean->ipsecCaCertConf_ = ipsecVpnConfig->ipsecCaCertConf_;
213     vpnBean->ipsecPrivateUserCertConf_ = ipsecVpnConfig->ipsecPrivateUserCertConf_;
214     vpnBean->ipsecPublicUserCertConf_ = ipsecVpnConfig->ipsecPublicUserCertConf_;
215     vpnBean->ipsecPrivateServerCertConf_ = ipsecVpnConfig->ipsecPrivateServerCertConf_;
216     vpnBean->ipsecPublicServerCertConf_ = ipsecVpnConfig->ipsecPublicServerCertConf_;
217     vpnBean->ipsecCaCertFilePath_ = ipsecVpnConfig->ipsecCaCertFilePath_;
218     vpnBean->ipsecPrivateUserCertFilePath_ = ipsecVpnConfig->ipsecPrivateUserCertFilePath_;
219     vpnBean->ipsecPublicUserCertFilePath_ = ipsecVpnConfig->ipsecPublicUserCertFilePath_;
220     vpnBean->ipsecPrivateServerCertFilePath_ = ipsecVpnConfig->ipsecPrivateServerCertFilePath_;
221     vpnBean->ipsecPublicServerCertFilePath_ = ipsecVpnConfig->ipsecPublicServerCertFilePath_;
222 }
223 
ConvertL2tpVpnConfigToVpnBean(sptr<L2tpVpnConfig> & l2tpVpnConfig,sptr<VpnDataBean> & vpnBean)224 void VpnDataBean::ConvertL2tpVpnConfigToVpnBean(sptr<L2tpVpnConfig> &l2tpVpnConfig, sptr<VpnDataBean> &vpnBean)
225 {
226     if (vpnBean == nullptr || l2tpVpnConfig == nullptr) {
227         NETMGR_EXT_LOG_E("ConvertL2tpVpnConfigToVpnBean params is null");
228         return;
229     }
230     vpnBean->ipsecPreSharedKey_ = l2tpVpnConfig->ipsecPreSharedKey_;
231     vpnBean->ipsecIdentifier_ = l2tpVpnConfig->ipsecIdentifier_;
232     vpnBean->strongswanConf_ = l2tpVpnConfig->strongswanConf_;
233     vpnBean->ipsecCaCertConf_ = l2tpVpnConfig->ipsecCaCertConf_;
234     vpnBean->ipsecPrivateUserCertConf_ = l2tpVpnConfig->ipsecPrivateUserCertConf_;
235     vpnBean->ipsecPublicUserCertConf_ = l2tpVpnConfig->ipsecPublicUserCertConf_;
236     vpnBean->ipsecPrivateServerCertConf_ = l2tpVpnConfig->ipsecPrivateServerCertConf_;
237     vpnBean->ipsecPublicServerCertConf_ = l2tpVpnConfig->ipsecPublicServerCertConf_;
238     vpnBean->ipsecCaCertFilePath_ = l2tpVpnConfig->ipsecCaCertFilePath_;
239     vpnBean->ipsecPrivateUserCertFilePath_ = l2tpVpnConfig->ipsecPrivateUserCertFilePath_;
240     vpnBean->ipsecPublicUserCertFilePath_ = l2tpVpnConfig->ipsecPublicUserCertFilePath_;
241     vpnBean->ipsecPrivateServerCertFilePath_ = l2tpVpnConfig->ipsecPrivateServerCertFilePath_;
242     vpnBean->ipsecPublicServerCertFilePath_ = l2tpVpnConfig->ipsecPublicServerCertFilePath_;
243 
244     vpnBean->ipsecConf_ = l2tpVpnConfig->ipsecConf_;
245     vpnBean->ipsecSecrets_ = l2tpVpnConfig->ipsecSecrets_;
246     vpnBean->optionsL2tpdClient_ = l2tpVpnConfig->optionsL2tpdClient_;
247     vpnBean->xl2tpdConf_ = l2tpVpnConfig->xl2tpdConf_;
248     vpnBean->l2tpSharedKey_ = l2tpVpnConfig->l2tpSharedKey_;
249 }
250 } // namespace NetManagerStandard
251 } // namespace OHOS
252