From 648e92d2fa1fa0b20040688415ffbe5df0261e17 Mon Sep 17 00:00:00 2001 From: tola Date: Thu, 30 Oct 2025 22:23:51 +0700 Subject: [PATCH] updated database and database_type in config file --- config.json | 19 ++++++++------- src/database/database.c | 29 +++++++++++++++++------ src/database/db_delete_user.c | 16 +++++++++---- src/database/db_get_all_users.c | 16 +++++++++---- src/database/db_get_user_by_id.c | 16 +++++++++---- src/database/db_get_user_by_username.c | 16 +++++++++---- src/database/db_get_user_field_by_id.c | 16 +++++++++---- src/database/db_insert_user.c | 16 +++++++++---- src/database/db_update_user.c | 19 +++++++++++---- src/database/db_update_user_field.c | 16 +++++++++---- src/file_db/filedb_delete_user.c | 13 +++++++--- src/file_db/filedb_get_all_users.c | 7 ++++-- src/file_db/filedb_get_user_by_id.c | 6 ++++- src/file_db/filedb_get_user_by_username.c | 8 ++++--- src/file_db/filedb_get_user_field_by_id.c | 8 ++++--- src/file_db/filedb_insert_user.c | 14 +++++++---- src/file_db/filedb_update_user.c | 10 +++++--- src/file_db/filedb_update_user_field.c | 11 ++++++--- 18 files changed, 185 insertions(+), 71 deletions(-) diff --git a/config.json b/config.json index 1acaa40..5559e65 100644 --- a/config.json +++ b/config.json @@ -1,10 +1,11 @@ { - "database": "users.db", - "address": "0.0.0.0:8222", - "tls_address": "0.0.0.0:8223", - "default_users_file": "users.json", - "web": "./web", - "tls_enabled": true, - "tls_cert": "/home/tola/certs/localhost/localhost.crt", - "tls_key": "/home/tola/certs/localhost/localhost.key" -} \ No newline at end of file + "database": "asdf.json", + "database_type": "file", + "address": "0.0.0.0:8222", + "tls_address": "0.0.0.0:8223", + "default_users_file": "users.json", + "web": "./web", + "tls_enabled": true, + "tls_cert": "/home/tola/certs/localhost/localhost.crt", + "tls_key": "/home/tola/certs/localhost/localhost.key" +} diff --git a/src/database/database.c b/src/database/database.c index cbd371b..b2354fd 100644 --- a/src/database/database.c +++ b/src/database/database.c @@ -3,6 +3,8 @@ #include #include #include +#include "config/ConfigManager.h" +#include "config/config.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" @@ -10,17 +12,30 @@ void init_db() { #ifdef USE_SQLITE3 - sqlite_init_db(); -#else - return; + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + sqlite_init_db(); + free(dbtype); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return; +#ifdef USE_SQLITE3 + } #endif } - void migrate_db() { #ifdef USE_SQLITE3 - sqlite_migrate_db(); -#else - return; + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + sqlite_migrate_db(); + free(dbtype); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return; +#ifdef USE_SQLITE3 + } #endif } diff --git a/src/database/db_delete_user.c b/src/database/db_delete_user.c index b3e405a..5f3f18a 100644 --- a/src/database/db_delete_user.c +++ b/src/database/db_delete_user.c @@ -1,15 +1,23 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif bool db_delete_user(const int id) { #ifdef USE_SQLITE3 - return sqlite_delete_user(id); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_delete_user(id); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_delete_user(id); +#ifdef USE_SQLITE3 + } return filedb_delete_user(id); #endif } diff --git a/src/database/db_get_all_users.c b/src/database/db_get_all_users.c index e489643..1bd9b15 100644 --- a/src/database/db_get_all_users.c +++ b/src/database/db_get_all_users.c @@ -1,15 +1,23 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif char *db_get_all_users() { #ifdef USE_SQLITE3 - return sqlite_get_all_users(); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_get_all_users(); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_get_all_users(); +#ifdef USE_SQLITE3 + } return filedb_get_all_users(); #endif } diff --git a/src/database/db_get_user_by_id.c b/src/database/db_get_user_by_id.c index d0d1203..fcfb5dc 100644 --- a/src/database/db_get_user_by_id.c +++ b/src/database/db_get_user_by_id.c @@ -1,15 +1,23 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif User *db_get_user_by_id(const int id) { #ifdef USE_SQLITE3 - return sqlite_get_user_by_id(id); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_get_user_by_id(id); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_get_user_by_id(id); +#ifdef USE_SQLITE3 + } return filedb_get_user_by_id(id); #endif } diff --git a/src/database/db_get_user_by_username.c b/src/database/db_get_user_by_username.c index 275f725..141736f 100644 --- a/src/database/db_get_user_by_username.c +++ b/src/database/db_get_user_by_username.c @@ -1,15 +1,23 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif User *db_get_user_by_username(const char *username) { #ifdef USE_SQLITE3 - return sqlite_get_user_by_username(username); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_get_user_by_username(username); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_get_user_by_username(username); +#ifdef USE_SQLITE3 + } return filedb_get_user_by_username(username); #endif } diff --git a/src/database/db_get_user_field_by_id.c b/src/database/db_get_user_field_by_id.c index 9885584..db84ec5 100644 --- a/src/database/db_get_user_field_by_id.c +++ b/src/database/db_get_user_field_by_id.c @@ -1,15 +1,23 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif char *db_get_user_field_by_id(const int id, const char *field) { #ifdef USE_SQLITE3 - return sqlite_get_user_field_by_id(id, field); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_get_user_field_by_id(id, field); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_get_user_field_by_id(id, field); +#ifdef USE_SQLITE3 + } return filedb_get_user_field_by_id(id, field); #endif } diff --git a/src/database/db_insert_user.c b/src/database/db_insert_user.c index 51dbc62..67132dd 100644 --- a/src/database/db_insert_user.c +++ b/src/database/db_insert_user.c @@ -1,17 +1,25 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif User *db_insert_user(const char *username, const char *email, const char *password, const char *group, const bool *is_superuser) { #ifdef USE_SQLITE3 - return sqlite_insert_user(username, email, password, group, is_superuser); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_insert_user(username, email, password, group, is_superuser); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_insert_user(username, email, password, group, is_superuser); +#ifdef USE_SQLITE3 + } return filedb_insert_user(username, email, password, group, is_superuser); #endif } diff --git a/src/database/db_update_user.c b/src/database/db_update_user.c index c0eddfa..48897cb 100644 --- a/src/database/db_update_user.c +++ b/src/database/db_update_user.c @@ -1,18 +1,27 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif User *db_update_user(const int userid, const char *username, const char *email, const char *password, const char *group, const bool *is_superuser) { #ifdef USE_SQLITE3 - return sqlite_update_user(userid, username, email, password, group, - is_superuser); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_update_user(userid, username, email, password, group, + is_superuser); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_update_user(userid, username, email, password, group, + is_superuser); +#ifdef USE_SQLITE3 + } return filedb_update_user(userid, username, email, password, group, is_superuser); #endif diff --git a/src/database/db_update_user_field.c b/src/database/db_update_user_field.c index 46bd030..367db54 100644 --- a/src/database/db_update_user_field.c +++ b/src/database/db_update_user_field.c @@ -1,15 +1,23 @@ #include "api/user.h" +#include "config/config.h" +#include "file_db/filedb.h" #ifdef USE_SQLITE3 #include "sqlite_db/sqlite.h" -#else -#include "file_db/filedb.h" #endif bool db_update_user_field(const int id, const char *field, const char *value) { #ifdef USE_SQLITE3 - return sqlite_update_user_field(id, field, value); -#else + char *dbtype = cm_get_parameter_as_string(config, "database_type"); + if (!strcmp(dbtype, "sqlite")) { + free(dbtype); + return sqlite_update_user_field(id, field, value); + } else if (!strcmp(dbtype, "file")) { + free(dbtype); +#endif + return filedb_update_user_field(id, field, value); +#ifdef USE_SQLITE3 + } return filedb_update_user_field(id, field, value); #endif } diff --git a/src/file_db/filedb_delete_user.c b/src/file_db/filedb_delete_user.c index da99b05..c4ffec3 100644 --- a/src/file_db/filedb_delete_user.c +++ b/src/file_db/filedb_delete_user.c @@ -1,12 +1,15 @@ #include #include -#include "utils/file.h" #include "cJSON.h" +#include "config/ConfigManager.h" +#include "config/config.h" #include "filedb.h" +#include "utils/file.h" bool filedb_delete_user(const int id) { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); cJSON *users = cJSON_Parse(data); cJSON *user = nullptr; int index = 0; @@ -22,12 +25,16 @@ bool filedb_delete_user(const int id) { } if (!found) { pthread_mutex_unlock(&users_file_mutex); + free(data); + free(database_file); + cJSON_Delete(users); return false; } char *new_data = cJSON_Print(users); - write_file("users_db.json", new_data); + write_file(database_file, new_data); free(new_data); free(data); + free(database_file); cJSON_Delete(users); pthread_mutex_unlock(&users_file_mutex); return true; diff --git a/src/file_db/filedb_get_all_users.c b/src/file_db/filedb_get_all_users.c index 42ab6af..1393f32 100644 --- a/src/file_db/filedb_get_all_users.c +++ b/src/file_db/filedb_get_all_users.c @@ -1,10 +1,13 @@ #include -#include "utils/file.h" +#include "config/config.h" #include "filedb.h" +#include "utils/file.h" char *filedb_get_all_users() { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); + free(database_file); pthread_mutex_unlock(&users_file_mutex); return data; } diff --git a/src/file_db/filedb_get_user_by_id.c b/src/file_db/filedb_get_user_by_id.c index 3bae35c..2f6798a 100644 --- a/src/file_db/filedb_get_user_by_id.c +++ b/src/file_db/filedb_get_user_by_id.c @@ -1,10 +1,12 @@ #include #include "utils/file.h" #include "filedb.h" +#include "config/config.h" User *filedb_get_user_by_id(const int id) { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); cJSON *users = cJSON_Parse(data); cJSON *user = nullptr; User *found = nullptr; @@ -27,11 +29,13 @@ User *filedb_get_user_by_id(const int id) { // if (user != nullptr) cJSON_Delete(user); cJSON_Delete(users); free(data); + free(database_file); return nullptr; } pthread_mutex_unlock(&users_file_mutex); // if (user != nullptr) cJSON_Delete(user); cJSON_Delete(users); free(data); + free(database_file); return found; } diff --git a/src/file_db/filedb_get_user_by_username.c b/src/file_db/filedb_get_user_by_username.c index 587df8a..5b7c8e0 100644 --- a/src/file_db/filedb_get_user_by_username.c +++ b/src/file_db/filedb_get_user_by_username.c @@ -1,10 +1,12 @@ #include #include "utils/file.h" #include "filedb.h" +#include "config/config.h" User *filedb_get_user_by_username(const char *username) { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); cJSON *users = cJSON_Parse(data); cJSON *user = nullptr; User *found = nullptr; @@ -24,14 +26,14 @@ User *filedb_get_user_by_username(const char *username) { } if (found == nullptr) { pthread_mutex_unlock(&users_file_mutex); - // if (user != nullptr) cJSON_Delete(user); cJSON_Delete(users); free(data); + free(database_file); return nullptr; } pthread_mutex_unlock(&users_file_mutex); - // if (user != nullptr) cJSON_Delete(user); cJSON_Delete(users); free(data); + free(database_file); return found; } diff --git a/src/file_db/filedb_get_user_field_by_id.c b/src/file_db/filedb_get_user_field_by_id.c index ee45cf6..9ef9dda 100644 --- a/src/file_db/filedb_get_user_field_by_id.c +++ b/src/file_db/filedb_get_user_field_by_id.c @@ -1,10 +1,12 @@ #include #include "utils/file.h" #include "filedb.h" +#include "config/config.h" char *filedb_get_user_field_by_id(const int id, const char *field) { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); cJSON *users = cJSON_Parse(data); cJSON *user = nullptr; User *found = nullptr; @@ -24,14 +26,14 @@ char *filedb_get_user_field_by_id(const int id, const char *field) { } if (found == nullptr) { pthread_mutex_unlock(&users_file_mutex); - // if (user != nullptr) cJSON_Delete(user); cJSON_Delete(users); free(data); + free(database_file); return nullptr; } pthread_mutex_unlock(&users_file_mutex); - // if (user != nullptr) cJSON_Delete(user); cJSON_Delete(users); free(data); + free(database_file); return found->password; } diff --git a/src/file_db/filedb_insert_user.c b/src/file_db/filedb_insert_user.c index 8b84370..552e863 100644 --- a/src/file_db/filedb_insert_user.c +++ b/src/file_db/filedb_insert_user.c @@ -1,12 +1,14 @@ #include -#include "utils/file.h" +#include "config/config.h" #include "filedb.h" +#include "utils/file.h" User *filedb_insert_user(const char *username, const char *email, const char *password, const char *group, const bool *is_superuser) { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); cJSON *users = cJSON_Parse(data); cJSON *user = nullptr; int users_size = 0; @@ -26,6 +28,10 @@ User *filedb_insert_user(const char *username, const char *email, } if (found == true) { pthread_mutex_unlock(&users_file_mutex); + free(data); + cJSON_Delete(users); + if (user != nullptr) cJSON_Delete(user); + free(database_file); return nullptr; } cJSON *new_user_data = cJSON_CreateObject(); @@ -41,15 +47,15 @@ User *filedb_insert_user(const char *username, const char *email, } cJSON_AddItemToArray(users, new_user_data); char *new_data = cJSON_Print(users); - write_file("users_db.json", new_data); + write_file(database_file, new_data); pthread_mutex_unlock(&users_file_mutex); User *return_user = new_user(users_size, username, email, password, group, is_superuser); free(new_data); free(data); free(new_user_data_string); - // cJSON_Delete(new_user_data); cJSON_Delete(users); if (user != nullptr) cJSON_Delete(user); + free(database_file); return return_user; } diff --git a/src/file_db/filedb_update_user.c b/src/file_db/filedb_update_user.c index 279bca7..4922ecc 100644 --- a/src/file_db/filedb_update_user.c +++ b/src/file_db/filedb_update_user.c @@ -1,12 +1,14 @@ #include -#include "utils/file.h" +#include "config/config.h" #include "filedb.h" +#include "utils/file.h" User *filedb_update_user(const int userid, const char *username, const char *email, const char *password, const char *group, const bool *is_superuser) { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); cJSON *users = cJSON_Parse(data); cJSON *user = nullptr; cJSON_ArrayForEach(user, users) { @@ -23,10 +25,11 @@ User *filedb_update_user(const int userid, const char *username, cJSON_DeleteItemFromObject(user, "is_superuser"); cJSON_AddBoolToObject(user, "is_superuser", *is_superuser); char *new_data = cJSON_Print(users); - write_file("users_db.json", new_data); + write_file(database_file, new_data); free(new_data); free(data); cJSON_Delete(users); + free(database_file); User *ret = new_user(userid, username, password, email, group, is_superuser); pthread_mutex_unlock(&users_file_mutex); @@ -34,6 +37,7 @@ User *filedb_update_user(const int userid, const char *username, } } free(data); + free(database_file); cJSON_Delete(users); pthread_mutex_unlock(&users_file_mutex); return nullptr; diff --git a/src/file_db/filedb_update_user_field.c b/src/file_db/filedb_update_user_field.c index 7f587b8..c061803 100644 --- a/src/file_db/filedb_update_user_field.c +++ b/src/file_db/filedb_update_user_field.c @@ -1,11 +1,13 @@ #include -#include "utils/file.h" +#include "config/config.h" #include "filedb.h" +#include "utils/file.h" bool filedb_update_user_field(const int id, const char *field, const char *value) { pthread_mutex_lock(&users_file_mutex); - char *data = read_file("users_db.json"); + char *database_file = cm_get_parameter_as_string(config, "database"); + char *data = read_file(database_file); cJSON *users = cJSON_Parse(data); cJSON *user = nullptr; cJSON_ArrayForEach(user, users) { @@ -14,18 +16,21 @@ bool filedb_update_user_field(const int id, const char *field, cJSON *user_field = cJSON_GetObjectItem(user, field); if (cJSON_IsNumber(user_field)) { // cJSON_SetNumberValue(user_field, value); + free(database_file); return false; } else if (cJSON_IsBool(user_field)) { // cJSON_DeleteItemFromObject(user, field); // cJSON_AddBoolToObject(user, field, value); + free(database_file); return false; } else if (cJSON_IsString(user_field)) { cJSON_SetValuestring(user_field, value); } char *new_data = cJSON_Print(users); - write_file("users_db.json", new_data); + write_file(database_file, new_data); free(new_data); free(data); + free(database_file); cJSON_Delete(users); pthread_mutex_unlock(&users_file_mutex); return true; -- 2.54.0