-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.cpp
More file actions
131 lines (109 loc) · 3.91 KB
/
Copy pathdatabase.cpp
File metadata and controls
131 lines (109 loc) · 3.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "database.h"
#include <iostream>
sqlite3 *db;
int create_database() {
int rc = sqlite3_open("health_data.db", &db);
if (rc) {
std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
return rc;
}
const char *sql = R"(
CREATE TABLE IF NOT EXISTS USER_DATA (
COOKIE_UUID TEXT PRIMARY KEY NOT NULL,
DATA TEXT NOT NULL,
EXPIRATION_DATE DATE NOT NULL
);
)";
char *errMsg = nullptr;
rc = sqlite3_exec(db, sql, nullptr, nullptr, &errMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << errMsg << std::endl;
sqlite3_free(errMsg);
sqlite3_close(db);
return rc;
}
return SQLITE_OK;
}
// Function to insert user data into the database
int insert_or_update_user_data(const std::string &cookie_uuid,
const std::string &data_json,
const std::string &expiration_date) {
sqlite3_stmt *stmt;
const char *sql_check =
"SELECT COUNT(*) FROM USER_DATA WHERE COOKIE_UUID = ?;";
const char *sql_insert = "INSERT INTO USER_DATA (COOKIE_UUID, DATA, "
"EXPIRATION_DATE) VALUES (?, ?, ?);";
const char *sql_update = "UPDATE USER_DATA SET DATA = ?, EXPIRATION_DATE = ? "
"WHERE COOKIE_UUID = ?;";
// Check if the entry exists
int rc = sqlite3_prepare_v2(db, sql_check, -1, &stmt, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "SQL prepare error: " << sqlite3_errmsg(db) << std::endl;
return rc;
}
sqlite3_bind_text(stmt, 1, cookie_uuid.c_str(), -1, SQLITE_STATIC);
rc = sqlite3_step(stmt);
bool exists = false;
if (rc == SQLITE_ROW) {
exists = sqlite3_column_int(stmt, 0) > 0;
}
sqlite3_finalize(stmt);
// Insert or update based on existence
if (exists) {
rc = sqlite3_prepare_v2(db, sql_update, -1, &stmt, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "SQL prepare error: " << sqlite3_errmsg(db) << std::endl;
return rc;
}
sqlite3_bind_text(stmt, 1, data_json.c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, expiration_date.c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 3, cookie_uuid.c_str(), -1, SQLITE_STATIC);
} else {
rc = sqlite3_prepare_v2(db, sql_insert, -1, &stmt, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "SQL prepare error: " << sqlite3_errmsg(db) << std::endl;
return rc;
}
sqlite3_bind_text(stmt, 1, cookie_uuid.c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, data_json.c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 3, expiration_date.c_str(), -1, SQLITE_STATIC);
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
std::cerr << "SQL execution error: " << sqlite3_errmsg(db) << std::endl;
}
sqlite3_finalize(stmt);
return rc;
}
// Function to fetch user data
std::string fetch_user_data(const std::string &cookie_uuid) {
sqlite3_stmt *stmt;
const char *sql = "SELECT DATA FROM USER_DATA WHERE COOKIE_UUID = ?;";
int rc = sqlite3_prepare_v2(db, sql, -1, &stmt, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "SQL prepare error: " << sqlite3_errmsg(db) << std::endl;
return "";
}
sqlite3_bind_text(stmt, 1, cookie_uuid.c_str(), -1, SQLITE_STATIC);
std::string data;
if (sqlite3_step(stmt) == SQLITE_ROW) {
data = reinterpret_cast<const char *>(sqlite3_column_text(stmt, 0));
} else {
std::cerr << "No data found for cookie: " << cookie_uuid << std::endl;
}
sqlite3_finalize(stmt);
return data;
}
// Function to delete expired cookies
void delete_expired_cookies() {
const char *sql =
"DELETE FROM USER_DATA WHERE EXPIRATION_DATE < DATE('now');";
char *errMsg = nullptr;
int rc = sqlite3_exec(db, sql, nullptr, nullptr, &errMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL delete error: " << errMsg << std::endl;
sqlite3_free(errMsg);
} else {
std::cout << "Expired cookies deleted successfully." << std::endl;
}
}