mirror of
https://github.com/Karaka-Management/oms-OnlineResourceWatcher.git
synced 2026-01-23 13:28:39 +00:00
114 lines
2.6 KiB
C++
Executable File
114 lines
2.6 KiB
C++
Executable File
/**
|
|
* Karaka
|
|
*
|
|
* @package App
|
|
* @copyright Dennis Eichhorn
|
|
* @license OMS License 1.0
|
|
* @version 1.0.0
|
|
* @link https://karaka.app
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#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);
|
|
}
|