• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_database_helper.h"
17 
18 #include <cstdlib>
19 #include <filesystem>
20 
21 #include "net_manager_constants.h"
22 #include "net_manager_ext_constants.h"
23 #include "netmgr_ext_log_wrapper.h"
24 #include "vpn_database_defines.h"
25 #include "vpn_encryption_util.h"
26 
27 namespace OHOS {
28 namespace NetManagerStandard {
29 using namespace VpnDatabaseDefines;
30 
GetInstance()31 VpnDatabaseHelper &VpnDatabaseHelper::GetInstance()
32 {
33     static VpnDatabaseHelper instance;
34     return instance;
35 }
36 
VpnDatabaseHelper()37 VpnDatabaseHelper::VpnDatabaseHelper()
38 {
39     if (!std::filesystem::exists(VPN_DATABASE_PATH)) {
40         std::error_code ec;
41         if (std::filesystem::create_directories(VPN_DATABASE_PATH, ec)) {
42             NETMGR_EXT_LOG_D("create_directories success :%{public}s", VPN_DATABASE_PATH.c_str());
43         } else {
44             NETMGR_EXT_LOG_E("create_directories error :%{public}s : %s", VPN_DATABASE_PATH.c_str(),
45                 ec.message().c_str());
46         }
47     }
48     std::string vpnDatabaseName = VPN_DATABASE_PATH + VPN_DB_NAME;
49     int32_t errCode = OHOS::NativeRdb::E_OK;
50     OHOS::NativeRdb::RdbStoreConfig config(vpnDatabaseName);
51     config.SetSecurityLevel(NativeRdb::SecurityLevel::S1);
52     VpnDataBaseCallBack sqliteOpenHelperCallback;
53     store_ = OHOS::NativeRdb::RdbHelper::GetRdbStore(config, DATABASE_OPEN_VERSION, sqliteOpenHelperCallback, errCode);
54     if (errCode != OHOS::NativeRdb::E_OK && errCode != OHOS::NativeRdb::E_SQLITE_CORRUPT) {
55         NETMGR_EXT_LOG_E("GetRdbStore failed. errCode :%{public}d", errCode);
56     } else {
57         NETMGR_EXT_LOG_I("GetRdbStore success");
58     }
59 
60     if (SetUpHks() != HKS_SUCCESS) {
61         NETMGR_EXT_LOG_E("SetUpHks failed");
62     }
63 }
64 
OnCreate(OHOS::NativeRdb::RdbStore & store)65 int32_t VpnDataBaseCallBack::OnCreate(OHOS::NativeRdb::RdbStore &store)
66 {
67     NETMGR_EXT_LOG_I("DB OnCreate Enter");
68     std::string sql =
69         "CREATE TABLE IF NOT EXISTS " + VPN_CONFIG_TABLE + "(" + std::string(VPN_CONFIG_TABLE_CREATE_PARAM) + ");";
70     int32_t ret = store.ExecuteSql(sql);
71     if (ret != OHOS::NativeRdb::E_OK) {
72         NETMGR_EXT_LOG_E("Create table failed: %{public}d", ret);
73         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
74     }
75     return NETMANAGER_EXT_SUCCESS;
76 }
77 
OnUpgrade(OHOS::NativeRdb::RdbStore & store,int32_t oldVersion,int32_t newVersion)78 int32_t VpnDataBaseCallBack::OnUpgrade(OHOS::NativeRdb::RdbStore &store, int32_t oldVersion, int32_t newVersion)
79 {
80     NETMGR_EXT_LOG_I("DB OnUpgrade Enter");
81     return NETMANAGER_EXT_SUCCESS;
82 }
83 
OnDowngrade(OHOS::NativeRdb::RdbStore & store,int32_t oldVersion,int32_t newVersion)84 int32_t VpnDataBaseCallBack::OnDowngrade(OHOS::NativeRdb::RdbStore &store, int32_t oldVersion, int32_t newVersion)
85 {
86     NETMGR_EXT_LOG_I("DB OnDowngrade Enter");
87     return NETMANAGER_EXT_SUCCESS;
88 }
89 
EncryptData(const sptr<VpnDataBean> & vpnBean)90 int32_t VpnDatabaseHelper::EncryptData(const sptr<VpnDataBean> &vpnBean)
91 {
92     if (vpnBean == nullptr) {
93         NETMGR_EXT_LOG_E("EncryptData failed, vpnBean is empty");
94         return NETMANAGER_EXT_ERR_INTERNAL;
95     }
96     VpnEncryptionInfo vpnEncryptionInfo;
97     vpnEncryptionInfo.SetFile(ENCRYT_KEY_FILENAME, vpnBean->userId_);
98 
99     if (VpnEncryptData(vpnEncryptionInfo, vpnBean->userName_) != NETMANAGER_EXT_SUCCESS) {
100         NETMGR_EXT_LOG_E("EncryptData userName_ failed");
101         return NETMANAGER_EXT_ERR_INTERNAL;
102     }
103     if (VpnEncryptData(vpnEncryptionInfo, vpnBean->password_) != NETMANAGER_EXT_SUCCESS) {
104         NETMGR_EXT_LOG_E("EncryptData password_ failed");
105         return NETMANAGER_EXT_ERR_INTERNAL;
106     }
107     if (VpnEncryptData(vpnEncryptionInfo, vpnBean->ipsecPreSharedKey_) != NETMANAGER_EXT_SUCCESS) {
108         NETMGR_EXT_LOG_E("EncryptData ipsecPreSharedKey_ failed");
109         return NETMANAGER_EXT_ERR_INTERNAL;
110     }
111     if (VpnEncryptData(vpnEncryptionInfo, vpnBean->l2tpSharedKey_) != NETMANAGER_EXT_SUCCESS) {
112         NETMGR_EXT_LOG_E("EncryptData l2tpSharedKey_ failed");
113         return NETMANAGER_EXT_ERR_INTERNAL;
114     }
115     if (VpnEncryptData(vpnEncryptionInfo, vpnBean->askpass_) != NETMANAGER_EXT_SUCCESS) {
116         NETMGR_EXT_LOG_E("EncryptData askpass_ failed");
117         return NETMANAGER_EXT_ERR_INTERNAL;
118     }
119     return NETMANAGER_EXT_SUCCESS;
120 }
121 
DecryptData(const sptr<VpnDataBean> & vpnBean)122 int32_t VpnDatabaseHelper::DecryptData(const sptr<VpnDataBean> &vpnBean)
123 {
124     if (vpnBean == nullptr) {
125         NETMGR_EXT_LOG_E("DecryptData failed, vpnBean is empty");
126         return NETMANAGER_EXT_ERR_INTERNAL;
127     }
128     VpnEncryptionInfo vpnEncryptionInfo;
129     vpnEncryptionInfo.SetFile(ENCRYT_KEY_FILENAME, vpnBean->userId_);
130 
131     if (VpnDecryptData(vpnEncryptionInfo, vpnBean->userName_) != NETMANAGER_EXT_SUCCESS) {
132         NETMGR_EXT_LOG_E("DecryptData userName_ failed");
133         return NETMANAGER_EXT_ERR_INTERNAL;
134     }
135     if (VpnDecryptData(vpnEncryptionInfo, vpnBean->password_) != NETMANAGER_EXT_SUCCESS) {
136         NETMGR_EXT_LOG_E("DecryptData password_ failed");
137         return NETMANAGER_EXT_ERR_INTERNAL;
138     }
139     if (VpnDecryptData(vpnEncryptionInfo, vpnBean->ipsecPreSharedKey_) != NETMANAGER_EXT_SUCCESS) {
140         NETMGR_EXT_LOG_E("DecryptData ipsecPreSharedKey_ failed");
141         return NETMANAGER_EXT_ERR_INTERNAL;
142     }
143     if (VpnDecryptData(vpnEncryptionInfo, vpnBean->l2tpSharedKey_) != NETMANAGER_EXT_SUCCESS) {
144         NETMGR_EXT_LOG_E("DecryptData l2tpSharedKey_ failed");
145         return NETMANAGER_EXT_ERR_INTERNAL;
146     }
147     if (VpnDecryptData(vpnEncryptionInfo, vpnBean->askpass_) != NETMANAGER_EXT_SUCCESS) {
148         NETMGR_EXT_LOG_E("EncryptData askpass_ failed");
149         return NETMANAGER_EXT_ERR_INTERNAL;
150     }
151     return NETMANAGER_EXT_SUCCESS;
152 }
153 
InsertOrUpdateData(const sptr<VpnDataBean> & vpnBean)154 int32_t VpnDatabaseHelper::InsertOrUpdateData(const sptr<VpnDataBean> &vpnBean)
155 {
156     if (vpnBean == nullptr) {
157         NETMGR_EXT_LOG_E("InsertOrUpdateData vpnBean is nullptr");
158         return NETMANAGER_EXT_ERR_INVALID_PARAMETER;
159     }
160 
161     if (getVpnDataSize(vpnBean) >= SYSVPN_MAX_SIZE) {
162         NETMGR_EXT_LOG_E("InsertOrUpdateData failed, exceeded the size limit %{public}d", SYSVPN_MAX_SIZE);
163         return NETMANAGER_EXT_ERR_INTERNAL;
164     }
165 
166     if (EncryptData(vpnBean) != NETMANAGER_SUCCESS) {
167         NETMGR_EXT_LOG_E("EncryptData failed");
168         return NETMANAGER_EXT_ERR_INTERNAL;
169     }
170 
171     if (IsVpnInfoExists(vpnBean->vpnId_)) {
172         return UpdateData(vpnBean);
173     }
174     return InsertData(vpnBean);
175 }
176 
getVpnDataSize(const sptr<VpnDataBean> & vpnBean)177 int32_t VpnDatabaseHelper::getVpnDataSize(const sptr<VpnDataBean> &vpnBean)
178 {
179     int32_t size = 0;
180     if (vpnBean == nullptr) {
181         NETMGR_EXT_LOG_E("getVpnDataSize failed, vpnBean is nullptr");
182         return size;
183     }
184     if (store_ == nullptr) {
185         NETMGR_EXT_LOG_E("getVpnDataSize failed, store_ is nullptr");
186         return size;
187     }
188     std::vector<std::string> columns;
189     OHOS::NativeRdb::RdbPredicates rdbPredicate{ VPN_CONFIG_TABLE };
190     auto queryResultSet = store_->Query(rdbPredicate, columns);
191     if (queryResultSet == nullptr) {
192         NETMGR_EXT_LOG_E("getVpnDataSize failed, queryResultSet == nullptr");
193         return size;
194     }
195     int32_t ret = queryResultSet->GetRowCount(size);
196     if (ret != OHOS::NativeRdb::E_OK) {
197         NETMGR_EXT_LOG_E("getVpnDataSize failed, get row count failed, ret:%{public}d", ret);
198         return size;
199     }
200     NETMGR_EXT_LOG_I("getVpnDataSize size=%{public}d", size);
201     return size;
202 }
203 
IsVpnInfoExists(const std::string & vpnId)204 bool VpnDatabaseHelper::IsVpnInfoExists(const std::string &vpnId)
205 {
206     if (vpnId.empty()) {
207         NETMGR_EXT_LOG_E("IsVpnInfoExists vpnId is empty");
208         return false;
209     }
210     if (store_ == nullptr) {
211         NETMGR_EXT_LOG_E("IsVpnInfoExists store_ is nullptr");
212         return false;
213     }
214 
215     std::vector<std::string> columns;
216     OHOS::NativeRdb::RdbPredicates rdbPredicate{ VPN_CONFIG_TABLE };
217     rdbPredicate.EqualTo(VPN_ID, vpnId);
218     auto queryResultSet = store_->Query(rdbPredicate, columns);
219     if (queryResultSet == nullptr) {
220         NETMGR_EXT_LOG_E("Query error");
221         return false;
222     }
223 
224     int32_t rowCount = 0;
225     int32_t ret = queryResultSet->GetRowCount(rowCount);
226     if (ret != OHOS::NativeRdb::E_OK) {
227         NETMGR_EXT_LOG_E("get row count failed, ret:%{public}d", ret);
228         return false;
229     }
230     return rowCount == 1;
231 }
232 
BindVpnData(NativeRdb::ValuesBucket & values,const sptr<VpnDataBean> & info)233 void VpnDatabaseHelper::BindVpnData(NativeRdb::ValuesBucket &values, const sptr<VpnDataBean> &info)
234 {
235     if (info == nullptr) {
236         NETMGR_EXT_LOG_E("BindVpnData info is nullptr");
237         return;
238     }
239     values.PutString(VPN_ID, info->vpnId_);
240     values.PutString(VPN_NAME, info->vpnName_);
241     values.PutInt(VPN_TYPE, info->vpnType_);
242     values.PutString(VPN_ADDRESS, info->vpnAddress_);
243     values.PutString(USER_NAME, info->userName_);
244     values.PutString(PASSWORD, info->password_);
245     values.PutInt(USER_ID, info->userId_);
246     values.PutInt(VPN_IS_LEGACY, info->isLegacy_);
247     values.PutInt(VPN_SAVE_LOGIN, info->saveLogin_);
248     values.PutString(VPN_FORWARDED_ROUTES, info->forwardingRoutes_);
249     values.PutString(VPN_DNS_ADDRESSES, info->dnsAddresses_);
250     values.PutString(VPN_SEARCH_DOMAINS, info->searchDomains_);
251 
252     values.PutString(OPENVPN_PORT, info->ovpnPort_);
253     values.PutInt(OPENVPN_PROTOCOL, info->ovpnProtocol_);
254     values.PutString(OPENVPN_CFG, info->ovpnConfig_);
255     values.PutInt(OPENVPN_AUTH_TYPE, info->ovpnAuthType_);
256     values.PutString(OPENVPN_ASKPASS, info->askpass_);
257     values.PutString(OPENVPN_CFG_FILE_PATH, info->ovpnConfigFilePath_);
258     values.PutString(OPENVPN_CA_CERT_FILE_PATH, info->ovpnCaCertFilePath_);
259     values.PutString(OPENVPN_USER_CERT_FILE_PATH, info->ovpnUserCertFilePath_);
260     values.PutString(OPENVPN_PRIVATE_KEY_FILE_PATH, info->ovpnPrivateKeyFilePath_);
261 
262     values.PutString(IPSEC_PRE_SHARE_KEY, info->ipsecPreSharedKey_);
263     values.PutString(IPSEC_IDENTIFIER, info->ipsecIdentifier_);
264     values.PutString(SWANCTL_CONF, info->swanctlConf_);
265     values.PutString(STRONGSWAN_CONF, info->strongswanConf_);
266     values.PutString(IPSEC_CA_CERT_CONF, info->ipsecCaCertConf_);
267     values.PutString(IPSEC_PRIVATE_USER_CERT_CONF, info->ipsecPrivateUserCertConf_);
268     values.PutString(IPSEC_PUBLIC_USER_CERT_CONF, info->ipsecPublicUserCertConf_);
269     values.PutString(IPSEC_PRIVATE_SERVER_CERT_CONF, info->ipsecPrivateServerCertConf_);
270     values.PutString(IPSEC_PUBLIC_SERVER_CERT_CONF, info->ipsecPublicServerCertConf_);
271     values.PutString(IPSEC_CA_CERT_FILE_PATH, info->ipsecCaCertFilePath_);
272     values.PutString(IPSEC_PRIVATE_USER_CERT_FILE_PATH, info->ipsecPrivateUserCertFilePath_);
273     values.PutString(IPSEC_PUBLIC_USER_CERT_FILE_PATH, info->ipsecPublicUserCertFilePath_);
274     values.PutString(IPSEC_PRIVATE_SERVER_CERT_FILE_PATH, info->ipsecPrivateServerCertFilePath_);
275     values.PutString(IPSEC_PUBLIC_SERVER_CERT_FILE_PATH, info->ipsecPublicServerCertFilePath_);
276     values.PutString(IPSEC_CONF, info->ipsecConf_);
277     values.PutString(IPSEC_SECRETS, info->ipsecSecrets_);
278     values.PutString(OPTIONS_L2TPD_CLIENT, info->optionsL2tpdClient_);
279     values.PutString(XL2TPD_CONF, info->xl2tpdConf_);
280     values.PutString(L2TP_SHARED_KEY, info->l2tpSharedKey_);
281 }
282 
InsertData(const sptr<VpnDataBean> & vpnBean)283 int32_t VpnDatabaseHelper::InsertData(const sptr<VpnDataBean> &vpnBean)
284 {
285     NETMGR_EXT_LOG_I("InsertData");
286     if (vpnBean == nullptr) {
287         NETMGR_EXT_LOG_E("InsertData vpnBean is nullptr");
288         return NETMANAGER_EXT_ERR_INVALID_PARAMETER;
289     }
290     if (store_ == nullptr) {
291         NETMGR_EXT_LOG_E("InsertData store_ is nullptr");
292         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
293     }
294 
295     NativeRdb::ValuesBucket values;
296     BindVpnData(values, vpnBean);
297     int64_t rowId = 0;
298     int ret = store_->Insert(rowId, VPN_CONFIG_TABLE, values);
299     if (ret != NativeRdb::E_OK) {
300         NETMGR_EXT_LOG_E("InsertData failed, result is %{public}d", ret);
301         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
302     }
303     return NETMANAGER_EXT_SUCCESS;
304 }
305 
UpdateData(const sptr<VpnDataBean> & vpnBean)306 int32_t VpnDatabaseHelper::UpdateData(const sptr<VpnDataBean> &vpnBean)
307 {
308     if (store_ == nullptr) {
309         NETMGR_EXT_LOG_E("UpdateData store_ is nullptr");
310         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
311     }
312     if (vpnBean == nullptr) {
313         NETMGR_EXT_LOG_E("UpdateData vpnBean is nullptr");
314         return NETMANAGER_EXT_ERR_INVALID_PARAMETER;
315     }
316     NETMGR_EXT_LOG_I("UpdateData");
317     OHOS::NativeRdb::RdbPredicates rdbPredicate{ VPN_CONFIG_TABLE };
318     rdbPredicate.EqualTo(VPN_ID, vpnBean->vpnId_);
319     NativeRdb::ValuesBucket values;
320     BindVpnData(values, vpnBean);
321     int32_t rowId = -1;
322     int32_t ret = store_->Update(rowId, values, rdbPredicate);
323     if (ret != OHOS::NativeRdb::E_OK) {
324         NETMGR_EXT_LOG_E("UpdateData ret :%{public}d", ret);
325         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
326     }
327     return NETMANAGER_EXT_SUCCESS;
328 }
329 
GetVpnDataFromResultSet(const std::shared_ptr<OHOS::NativeRdb::ResultSet> & queryResultSet,sptr<VpnDataBean> & vpnBean)330 void VpnDatabaseHelper::GetVpnDataFromResultSet(const std::shared_ptr<OHOS::NativeRdb::ResultSet> &queryResultSet,
331     sptr<VpnDataBean> &vpnBean)
332 {
333     queryResultSet->GetString(INDEX_VPN_ID, vpnBean->vpnId_);
334     queryResultSet->GetString(INDEX_VPN_NAME, vpnBean->vpnName_);
335     queryResultSet->GetInt(INDEX_VPN_TYPE, vpnBean->vpnType_);
336     queryResultSet->GetString(INDEX_VPN_ADDRESS, vpnBean->vpnAddress_);
337     queryResultSet->GetString(INDEX_USER_NAME, vpnBean->userName_);
338     queryResultSet->GetString(INDEX_PASSWORD, vpnBean->password_);
339     queryResultSet->GetInt(INDEX_USER_ID, vpnBean->userId_);
340     queryResultSet->GetInt(INDEX_VPN_IS_LEGACY, vpnBean->isLegacy_);
341     queryResultSet->GetInt(INDEX_VPN_SAVE_LOGIN, vpnBean->saveLogin_);
342     queryResultSet->GetString(INDEX_VPN_FORWARDED_ROUTES, vpnBean->forwardingRoutes_);
343     queryResultSet->GetString(INDEX_VPN_DNS_ADDRESSES, vpnBean->dnsAddresses_);
344     queryResultSet->GetString(INDEX_VPN_SEARCH_DOMAINS, vpnBean->searchDomains_);
345     queryResultSet->GetString(INDEX_OPENVPN_PORT, vpnBean->ovpnPort_);
346     queryResultSet->GetInt(INDEX_OPENVPN_PROTOCOL, vpnBean->ovpnProtocol_);
347     queryResultSet->GetString(INDEX_OPENVPN_CFG, vpnBean->ovpnConfig_);
348     queryResultSet->GetInt(INDEX_OPENVPN_AUTH_TYPE, vpnBean->ovpnAuthType_);
349     queryResultSet->GetString(INDEX_OPENVPN_ASKPASS, vpnBean->askpass_);
350     queryResultSet->GetString(INDEX_OPENVPN_CFG_FILE_PATH, vpnBean->ovpnConfigFilePath_);
351     queryResultSet->GetString(INDEX_OPENVPN_CA_CERT_FILE_PATH, vpnBean->ovpnCaCertFilePath_);
352     queryResultSet->GetString(INDEX_OPENVPN_USER_CERT_FILE_PATH, vpnBean->ovpnUserCertFilePath_);
353     queryResultSet->GetString(INDEX_OPENVPN_PRIVATE_KEY_FILE_PATH, vpnBean->ovpnPrivateKeyFilePath_);
354 
355     queryResultSet->GetString(INDEX_IPSEC_PRE_SHARE_KEY, vpnBean->ipsecPreSharedKey_);
356     queryResultSet->GetString(INDEX_IPSEC_IDENTIFIER, vpnBean->ipsecIdentifier_);
357     queryResultSet->GetString(INDEX_SWANCTL_CONF, vpnBean->swanctlConf_);
358     queryResultSet->GetString(INDEX_STRONGSWAN_CONF, vpnBean->strongswanConf_);
359     queryResultSet->GetString(INDEX_IPSEC_CA_CERT_CONF, vpnBean->ipsecCaCertConf_);
360     queryResultSet->GetString(INDEX_IPSEC_PRIVATE_USER_CERT_CONF, vpnBean->ipsecPrivateUserCertConf_);
361     queryResultSet->GetString(INDEX_IPSEC_PUBLIC_USER_CERT_CONF, vpnBean->ipsecPublicUserCertConf_);
362     queryResultSet->GetString(INDEX_IPSEC_PRIVATE_SERVER_CERT_CONF, vpnBean->ipsecPrivateServerCertConf_);
363     queryResultSet->GetString(INDEX_IPSEC_PUBLIC_SERVER_CERT_CONF, vpnBean->ipsecPublicServerCertConf_);
364     queryResultSet->GetString(INDEX_IPSEC_CA_CERT_FILE_PATH, vpnBean->ipsecCaCertFilePath_);
365     queryResultSet->GetString(INDEX_IPSEC_PRIVATE_USER_CERT_FILE_PATH, vpnBean->ipsecPrivateUserCertFilePath_);
366     queryResultSet->GetString(INDEX_IPSEC_PUBLIC_USER_CERT_FILE_PATH, vpnBean->ipsecPublicUserCertFilePath_);
367     queryResultSet->GetString(INDEX_IPSEC_PRIVATE_SERVER_CERT_FILE_PATH, vpnBean->ipsecPrivateServerCertFilePath_);
368     queryResultSet->GetString(INDEX_IPSEC_PUBLIC_SERVER_CERT_FILE_PATH, vpnBean->ipsecPublicServerCertFilePath_);
369     queryResultSet->GetString(INDEX_IPSEC_CONF, vpnBean->ipsecConf_);
370     queryResultSet->GetString(INDEX_IPSEC_SECRETS, vpnBean->ipsecSecrets_);
371     queryResultSet->GetString(INDEX_OPTIONS_L2TPD_CLIENT, vpnBean->optionsL2tpdClient_);
372     queryResultSet->GetString(INDEX_XL2TPD_CONF, vpnBean->xl2tpdConf_);
373     queryResultSet->GetString(INDEX_L2TP_SHARED_KEY, vpnBean->l2tpSharedKey_);
374 }
375 
QueryVpnData(sptr<VpnDataBean> & vpnBean,const std::string & vpnUuid)376 int32_t VpnDatabaseHelper::QueryVpnData(sptr<VpnDataBean> &vpnBean, const std::string &vpnUuid)
377 {
378     if (vpnBean == nullptr) {
379         NETMGR_EXT_LOG_E("QueryVpnData vpnBean is nullptr");
380         return NETMANAGER_EXT_ERR_INVALID_PARAMETER;
381     }
382     if (vpnUuid.empty()) {
383         NETMGR_EXT_LOG_E("QueryVpnData vpnUuid is empty");
384         return NETMANAGER_EXT_ERR_INVALID_PARAMETER;
385     }
386 
387     NETMGR_EXT_LOG_I("QueryVpnData vpnUuid=%{public}s", vpnUuid.c_str());
388     if (store_ == nullptr) {
389         NETMGR_EXT_LOG_E("QueryVpnData store_ is nullptr");
390         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
391     }
392 
393     std::vector<std::string> columns;
394     OHOS::NativeRdb::RdbPredicates rdbPredicate{ VPN_CONFIG_TABLE };
395     rdbPredicate.EqualTo(VPN_ID, vpnUuid);
396     auto queryResultSet = store_->Query(rdbPredicate, columns);
397     if (queryResultSet == nullptr) {
398         NETMGR_EXT_LOG_E("QueryVpnData error");
399         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
400     }
401     int32_t rowCount = 0;
402     int ret = queryResultSet->GetRowCount(rowCount);
403     if (ret != OHOS::NativeRdb::E_OK) {
404         NETMGR_EXT_LOG_E("QueryVpnData failed, get row count failed, ret:%{public}d", ret);
405         return ret;
406     }
407     if (rowCount == 0) {
408         NETMGR_EXT_LOG_E("QueryVpnData result num is 0");
409         return NETMANAGER_EXT_SUCCESS;
410     }
411     while (!queryResultSet->GoToNextRow()) {
412         GetVpnDataFromResultSet(queryResultSet, vpnBean);
413         if (vpnBean->vpnId_ == vpnUuid) {
414             DecryptData(vpnBean);
415             return NETMANAGER_SUCCESS;
416         }
417     }
418     return NETMANAGER_EXT_SUCCESS;
419 }
420 
QueryAllData(std::vector<SysVpnConfig> & infos,const int32_t userId)421 int32_t VpnDatabaseHelper::QueryAllData(std::vector<SysVpnConfig> &infos, const int32_t userId)
422 {
423     NETMGR_EXT_LOG_I("QueryAllData");
424     if (store_ == nullptr) {
425         NETMGR_EXT_LOG_E("QueryAllData store_ is nullptr");
426         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
427     }
428     infos.clear();
429     std::vector<std::string> columns;
430     OHOS::NativeRdb::RdbPredicates rdbPredicate{ VPN_CONFIG_TABLE };
431     rdbPredicate.EqualTo(USER_ID, userId);
432     auto queryResultSet = store_->Query(rdbPredicate, columns);
433     if (queryResultSet == nullptr) {
434         NETMGR_EXT_LOG_E("QueryAllData error");
435         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
436     }
437     int32_t rowCount = 0;
438     int ret = queryResultSet->GetRowCount(rowCount);
439     if (ret != OHOS::NativeRdb::E_OK) {
440         NETMGR_EXT_LOG_E("QueryAllData failed, get row count failed, ret:%{public}d", ret);
441         return ret;
442     }
443     if (rowCount == 0) {
444         NETMGR_EXT_LOG_E("QueryAllData result num is 0");
445         return NETMANAGER_EXT_SUCCESS;
446     }
447     while (!queryResultSet->GoToNextRow()) {
448         SysVpnConfig info;
449         queryResultSet->GetString(INDEX_VPN_ID, info.vpnId_);
450         queryResultSet->GetString(INDEX_VPN_NAME, info.vpnName_);
451         infos.emplace_back(info);
452     }
453     return NETMANAGER_EXT_SUCCESS;
454 }
455 
DeleteVpnData(const std::string & vpnUuid)456 int32_t VpnDatabaseHelper::DeleteVpnData(const std::string &vpnUuid)
457 {
458     NETMGR_EXT_LOG_I("DeleteVpnData");
459     if (vpnUuid.empty()) {
460         NETMGR_EXT_LOG_E("DeleteVpnData vpnUuid is empty");
461         return NETMANAGER_EXT_ERR_INVALID_PARAMETER;
462     }
463 
464     if (store_ == nullptr) {
465         NETMGR_EXT_LOG_E("DeleteVpnData store_ is nullptr");
466         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
467     }
468     int32_t deletedRows = -1;
469     OHOS::NativeRdb::RdbPredicates rdbPredicate{ VPN_CONFIG_TABLE };
470     rdbPredicate.EqualTo(VPN_ID, vpnUuid);
471     int32_t result = store_->Delete(deletedRows, rdbPredicate);
472     if (result != NativeRdb::E_OK) {
473         NETMGR_EXT_LOG_E("DeleteVpnData failed, result is %{public}d", result);
474         return NETMANAGER_EXT_ERR_OPERATION_FAILED;
475     }
476     return NETMANAGER_EXT_SUCCESS;
477 }
478 } // namespace NetManagerStandard
479 } // namespace OHOS
480