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