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 <filesystem>
17 #include <system_error>
18
19 #include "hilog/log.h"
20 #include "netmgr_ext_log_wrapper.h"
21 #include "netfirewall_database.h"
22
23 using namespace OHOS::NativeRdb;
24
25 namespace OHOS {
26 namespace NetManagerStandard {
27 std::shared_ptr<NetFirewallDataBase> NetFirewallDataBase::instance_ = nullptr;
28
NetFirewallDataBase()29 NetFirewallDataBase::NetFirewallDataBase()
30 {
31 if (!std::filesystem::exists(FIREWALL_DB_PATH)) {
32 std::error_code ec;
33 if (std::filesystem::create_directories(FIREWALL_DB_PATH, ec)) {
34 NETMGR_EXT_LOG_D("create_directories success :%{public}s", FIREWALL_DB_PATH.c_str());
35 } else {
36 NETMGR_EXT_LOG_E("create_directories error :%{public}s : %s", FIREWALL_DB_PATH.c_str(),
37 ec.message().c_str());
38 }
39 }
40 std::string firewallDatabaseName = FIREWALL_DB_PATH + FIREWALL_DB_NAME;
41 int32_t errCode = OHOS::NativeRdb::E_OK;
42 OHOS::NativeRdb::RdbStoreConfig config(firewallDatabaseName);
43 config.SetSecurityLevel(NativeRdb::SecurityLevel::S1);
44 NetFirewallDataBaseCallBack sqliteOpenHelperCallback;
45 store_ = OHOS::NativeRdb::RdbHelper::GetRdbStore(config, DATABASE_OPEN_VERSION, sqliteOpenHelperCallback, errCode);
46 if (errCode != OHOS::NativeRdb::E_OK) {
47 NETMGR_EXT_LOG_E("GetRdbStore errCode :%{public}d", errCode);
48 } else {
49 NETMGR_EXT_LOG_D("GetRdbStore success :%{public}d", errCode);
50 }
51 }
52
GetInstance()53 std::shared_ptr<NetFirewallDataBase> NetFirewallDataBase::GetInstance()
54 {
55 if (instance_ == nullptr) {
56 NETMGR_EXT_LOG_W("reset to new instance");
57 instance_.reset(new NetFirewallDataBase());
58 return instance_;
59 }
60 return instance_;
61 }
62
BeginTransaction()63 int32_t NetFirewallDataBase::BeginTransaction()
64 {
65 if (store_ == nullptr) {
66 NETMGR_EXT_LOG_E("BeginTransaction store_ is nullptr");
67 return FIREWALL_RDB_NO_INIT;
68 }
69 int32_t ret = store_->BeginTransaction();
70 if (ret != OHOS::NativeRdb::E_OK) {
71 NETMGR_EXT_LOG_E("BeginTransaction fail :%{public}d", ret);
72 return FIREWALL_RDB_EXECUTE_FAILTURE;
73 }
74 return FIREWALL_OK;
75 }
76
Commit()77 int32_t NetFirewallDataBase::Commit()
78 {
79 if (store_ == nullptr) {
80 NETMGR_EXT_LOG_E("Commit store_ is nullptr");
81 return FIREWALL_RDB_NO_INIT;
82 }
83 int32_t ret = store_->Commit();
84 if (ret != OHOS::NativeRdb::E_OK) {
85 NETMGR_EXT_LOG_E("Commit fail :%{public}d", ret);
86 return FIREWALL_RDB_EXECUTE_FAILTURE;
87 }
88 return FIREWALL_OK;
89 }
90
RollBack()91 int32_t NetFirewallDataBase::RollBack()
92 {
93 if (store_ == nullptr) {
94 NETMGR_EXT_LOG_E("RollBack store_ is nullptr");
95 return FIREWALL_RDB_NO_INIT;
96 }
97 int32_t ret = store_->RollBack();
98 if (ret != OHOS::NativeRdb::E_OK) {
99 NETMGR_EXT_LOG_E("RollBack fail :%{public}d", ret);
100 return FIREWALL_RDB_EXECUTE_FAILTURE;
101 }
102 return FIREWALL_OK;
103 }
104
Insert(const OHOS::NativeRdb::ValuesBucket & insertValues,const std::string tableName)105 int64_t NetFirewallDataBase::Insert(const OHOS::NativeRdb::ValuesBucket &insertValues, const std::string tableName)
106 {
107 if (store_ == nullptr) {
108 NETMGR_EXT_LOG_E("Insert store_ is nullptr");
109 return FIREWALL_RDB_NO_INIT;
110 }
111 int64_t outRowId = 0;
112 int32_t ret = store_->Insert(outRowId, tableName, insertValues);
113 NETMGR_EXT_LOG_D("Insert id=%{public}" PRIu64 "", outRowId);
114 if (ret != OHOS::NativeRdb::E_OK) {
115 NETMGR_EXT_LOG_E("Insert ret :%{public}d", ret);
116 return FIREWALL_RDB_EXECUTE_FAILTURE;
117 }
118 return outRowId;
119 }
120
121
Update(const std::string & tableName,int32_t & changedRows,const OHOS::NativeRdb::ValuesBucket & values,const std::string & whereClause,const std::vector<std::string> & whereArgs)122 int32_t NetFirewallDataBase::Update(const std::string &tableName, int32_t &changedRows,
123 const OHOS::NativeRdb::ValuesBucket &values, const std::string &whereClause,
124 const std::vector<std::string> &whereArgs)
125 {
126 if (store_ == nullptr) {
127 NETMGR_EXT_LOG_E("Update(whereClause) store_ is nullptr");
128 return FIREWALL_RDB_NO_INIT;
129 }
130 int32_t ret = store_->Update(changedRows, tableName, values, whereClause, whereArgs);
131 if (ret != OHOS::NativeRdb::E_OK) {
132 NETMGR_EXT_LOG_E("Update(whereClause) ret :%{public}d", ret);
133 return FIREWALL_RDB_EXECUTE_FAILTURE;
134 }
135 return FIREWALL_OK;
136 }
137
138
Delete(const std::string & tableName,int32_t & changedRows,const std::string & whereClause,const std::vector<std::string> & whereArgs)139 int32_t NetFirewallDataBase::Delete(const std::string &tableName, int32_t &changedRows, const std::string &whereClause,
140 const std::vector<std::string> &whereArgs)
141 {
142 if (store_ == nullptr) {
143 NETMGR_EXT_LOG_E("Delete store_ is nullptr");
144 return FIREWALL_RDB_NO_INIT;
145 }
146 int32_t ret = store_->Delete(changedRows, tableName, whereClause, whereArgs);
147 if (ret != OHOS::NativeRdb::E_OK) {
148 NETMGR_EXT_LOG_E("Delete(whereClause) ret :%{public}d", ret);
149 return FIREWALL_RDB_EXECUTE_FAILTURE;
150 }
151 return FIREWALL_OK;
152 }
153
154
Query(const OHOS::NativeRdb::AbsRdbPredicates & predicates,const std::vector<std::string> & columns)155 std::shared_ptr<OHOS::NativeRdb::ResultSet> NetFirewallDataBase::Query(
156 const OHOS::NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> &columns)
157 {
158 if (store_ == nullptr) {
159 NETMGR_EXT_LOG_E("Query(AbsRdbPredicates) store_ is nullptr");
160 return nullptr;
161 }
162 return store_->Query(predicates, columns);
163 }
164
Count(int64_t & outValue,const OHOS::NativeRdb::AbsRdbPredicates & predicates)165 int32_t NetFirewallDataBase::Count(int64_t &outValue, const OHOS::NativeRdb::AbsRdbPredicates &predicates)
166 {
167 if (store_ == nullptr) {
168 NETMGR_EXT_LOG_E("Count(AbsRdbPredicates) store_ is nullptr");
169 return FIREWALL_RDB_NO_INIT;
170 }
171 return store_->Count(outValue, predicates);
172 }
173
QuerySql(const std::string & sql,const std::vector<std::string> & selectionArgs)174 std::shared_ptr<OHOS::NativeRdb::ResultSet> NetFirewallDataBase::QuerySql(const std::string &sql,
175 const std::vector<std::string> &selectionArgs)
176 {
177 if (store_ == nullptr) {
178 NETMGR_EXT_LOG_E("QuerySql(AbsRdbPredicates) store_ is nullptr");
179 return nullptr;
180 }
181 return store_->QuerySql(sql, selectionArgs);
182 }
183
OnCreate(OHOS::NativeRdb::RdbStore & store)184 int32_t NetFirewallDataBaseCallBack::OnCreate(OHOS::NativeRdb::RdbStore &store)
185 {
186 std::map<std::string, std::string> netfirewallTableMap;
187 netfirewallTableMap.insert(std::pair<std::string, std::string>(FIREWALL_TABLE_NAME, CREATE_FIREWALL_TABLE));
188 netfirewallTableMap.insert(std::pair<std::string, std::string>(INTERCEPT_RECORD_TABLE, CREATE_RECORD_TABLE));
189 for (const auto &pair : netfirewallTableMap) {
190 std::string sql = pair.second;
191 int32_t ret = store.ExecuteSql(sql);
192 if (ret != OHOS::NativeRdb::E_OK) {
193 NETMGR_EXT_LOG_E("OnCreate %{public}s, failed: %{public}d", pair.first.c_str(), ret);
194 return FIREWALL_RDB_EXECUTE_FAILTURE;
195 }
196 NETMGR_EXT_LOG_D("DB OnCreate Done %{public}s ", pair.first.c_str());
197 }
198 return FIREWALL_OK;
199 }
200
OnUpgrade(OHOS::NativeRdb::RdbStore & store,int32_t oldVersion,int32_t newVersion)201 int32_t NetFirewallDataBaseCallBack::OnUpgrade(OHOS::NativeRdb::RdbStore &store, int32_t oldVersion, int32_t newVersion)
202 {
203 NETMGR_EXT_LOG_D("DB OnUpgrade Enter");
204 (void)store;
205 (void)oldVersion;
206 (void)newVersion;
207 return FIREWALL_OK;
208 }
209
OnDowngrade(OHOS::NativeRdb::RdbStore & store,int32_t oldVersion,int32_t newVersion)210 int32_t NetFirewallDataBaseCallBack::OnDowngrade(OHOS::NativeRdb::RdbStore &store, int32_t oldVersion,
211 int32_t newVersion)
212 {
213 NETMGR_EXT_LOG_D("DB OnDowngrade Enter");
214 (void)store;
215 (void)oldVersion;
216 (void)newVersion;
217 return FIREWALL_OK;
218 }
219 } // namespace NetManagerStandard
220 } // namespace OHOS