/** * Karaka * * @package App * @copyright Dennis Eichhorn * @license OMS License 1.0 * @version 1.0.0 * @link https://karaka.app */ #include #include #include "cOMS/Utils/ApplicationUtils.h" #include "DataStorage/Database/Connection/ConnectionAbstract.h" #include "cOMS/Utils/Parser/Json.h" #include "Stdlib/HashTable.h" #include "Routes.h" #ifndef OMS_DEMO #define OMS_DEMO false #endif typedef struct { DataStorage::Database::ConnectionAbstract *db; nlohmann::json config; } App; App app; int main(int argc, char **argv) { /* --------------- Basic setup --------------- */ char *arg = Utils::ApplicationUtils::compile_arg_line(argc, argv); // Set program path as cwd char *cwd = Utils::ApplicationUtils::cwd(); if (cwd == NULL) { printf("Couldn't get the CWD\n"); return -1; } Utils::ApplicationUtils::chdir_application(cwd, argv[0]); // Check config if (!Utils::FileUtils::file_exists("config.json")) { Controller::ApiController::notInstalled(argc, argv); return -1; } /* --------------- App setup --------------- */ // Load config FILE *in = fopen("config.json", "r"); if (in == NULL) { return -1; } app.config = nlohmann::json::parse(in); fclose(in); // Setup db connection DataStorage::Database::DbConnectionConfig dbdata = (DataStorage::Database::DbConnectionConfig) { db = DataStorage::Database::database_type_from_str(&app.config["db"]["core"]["masters"]["admin"]["db"]), database = &app.config["db"]["core"]["masters"]["admin"]["database"], host = &app.config["db"]["core"]["masters"]["admin"]["host"], port = app.config["db"]["core"]["masters"]["admin"]["port"], login = &app.config["db"]["core"]["masters"]["admin"]["login"], password = &app.config["db"]["core"]["masters"]["admin"]["password"], }; app->db = DataStorage::Database::create_connection(dbdata); app->db->connect(); /* --------------- Handle request --------------- */ // Handle routes Stdlib::HashTable::ht *routes = generate_routes(); if (routes == NULL) { return -1; } Fptr ptr = match_route(routes, arg); // Dispatch found endpoint (*ptr)(argc, argv); /* --------------- Cleanup --------------- */ app->db->close(); $app->db = NULL; Stdlib::HashTable::free_table(routes); free(routes); routes = NULL; free(arg); arg = NULL; // Reset CWD (don't know if this is necessary) #ifdef _WIN32 _chdir(cwd); #else chdir(cwd); #endif free(cwd); }