From cd769fa8bcfd9f1b68548a99e2156a989689b9dc Mon Sep 17 00:00:00 2001 From: Tiago Garcia Date: Fri, 19 Jul 2024 19:41:33 +0100 Subject: [PATCH] Hotfix for aarch64 Signed-off-by: Tiago Garcia --- README.md | 2 + include/endpoints/run-actions.hpp | 2 +- src/config.cpp | 2 +- src/endpoints/run-actions.cpp | 2 +- src/logger.cpp | 8 +++ src/routes.cpp | 107 ++++++++++++++++++------------ 6 files changed, 78 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index d3e6958..cea6da5 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,8 @@ The configuration file must contain the `run-actions` field, which is an object } ``` +Note: if you don't want to use the `args` field, just leave an empty array such as `"args": []`. + ## License This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details. diff --git a/include/endpoints/run-actions.hpp b/include/endpoints/run-actions.hpp index f74c8d4..3b94365 100644 --- a/include/endpoints/run-actions.hpp +++ b/include/endpoints/run-actions.hpp @@ -5,6 +5,6 @@ #include #include -crow::response run_actions(const nlohmann::json &, const nlohmann::json &,const crow::request &); +crow::response run_actions(const nlohmann::json &, const crow::request &); #endif diff --git a/src/config.cpp b/src/config.cpp index 7e53473..c5d76fb 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -9,7 +9,7 @@ void Config::create_config(std::string config_file_path) { std::cout << "Creating config file" << std::endl; nlohmann::json config = { {"port", 65001}, - {"tokens", nlohmann::json::array()}, + {"tokens", {}}, }; std::string path_to_config = config_file_path.substr(0, config_file_path.find_last_of('/')); if (!std::filesystem::exists(path_to_config)) { diff --git a/src/endpoints/run-actions.cpp b/src/endpoints/run-actions.cpp index 8e716e9..f64d5b5 100644 --- a/src/endpoints/run-actions.cpp +++ b/src/endpoints/run-actions.cpp @@ -2,7 +2,7 @@ #include "logger.hpp" -crow::response run_actions(const nlohmann::json &run_actions, const nlohmann::json &tokens, const crow::request &req) { +crow::response run_actions(const nlohmann::json &run_actions, const crow::request &req) { nlohmann::json payload; try { payload = nlohmann::json::parse(req.body); diff --git a/src/logger.cpp b/src/logger.cpp index 60af669..a94347f 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -117,10 +117,14 @@ void Logger::log(std::string message, std::string level) { formatted_message += "(" + std::string(time_buffer) + ") "; if (level == "CODE") { +#if defined(__aarch64__) + formatted_message += "\n" + message + "\n"; +#else struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); int term_width = w.ws_col > 250 ? 250 : w.ws_col - 1; formatted_message += "\n" + std::string(term_width, '=') + "\n" + message + "\n" + std::string(term_width, '='); +#endif } else { formatted_message += "[" + level + "] " + message; } @@ -129,10 +133,14 @@ void Logger::log(std::string message, std::string level) { } std::cout << formatted_message << std::endl; if (level == "CODE") { +#if defined(__aarch64__) + Logger::log_file << std::endl << message << std::endl; +#else struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); int term_width = w.ws_col > 250 ? 250 : w.ws_col - 1; Logger::log_file << std::string(term_width, '=') << std::endl << message << std::endl << std::string(term_width, '=') << std::endl; +#endif } else { Logger::log_file << "[" << level << "] " << message << std::endl; } diff --git a/src/routes.cpp b/src/routes.cpp index b21192f..0817e21 100644 --- a/src/routes.cpp +++ b/src/routes.cpp @@ -6,14 +6,14 @@ #include "logger.hpp" Routes::Routes(nlohmann::json config) { - Logger::info("Partitioning configuration"); + Logger::info("[Routes] Partitioning configuration"); const nlohmann::json config_update_files = config["update-files"]; const nlohmann::json config_run_actions = config["run-actions"]; const nlohmann::json config_tokens = config["tokens"]; - Logger::info("Registering route \"/\""); + Logger::info("[Routes] Registering route \"/\""); CROW_ROUTE(this->app, "/") - .methods("POST"_method) + .methods("POST"_method, "GET"_method) .name("Ping") ([]() { nlohmann::json response = { @@ -23,49 +23,72 @@ Routes::Routes(nlohmann::json config) { return crow::response(200, response.dump()); }); - if (!config_update_files.is_null()) { - Logger::info("Registering route \"/update-files\""); - CROW_ROUTE(this->app, "/update-files") - .methods("POST"_method) - .name("Update Files") - ([&config_update_files, &config_tokens](const crow::request &req) { - try { - return update_files(config_update_files, config_tokens, req); - } catch (const std::exception &e) { - Logger::error("Unknown error in update_files: " + std::string(e.what())); - nlohmann::json response = { - {"status", 500}, - {"error", "Internal server error"} - }; - return crow::response(500, response.dump()); - } - }); - } + Logger::info("[Routes] Registering route \"/update-files\""); + CROW_ROUTE(this->app, "/update-files") + .methods("POST"_method) + .name("Update Files") + ([&config_update_files, &config_tokens](const crow::request &req) { + if (config_update_files.is_null()) { + Logger::warn("[Routes] No update-files configuration found"); + nlohmann::json response = { + {"status", 404}, + {"error", "No update-files configuration found"} + }; + return crow::response(404, response.dump()); + } + try { + return update_files(config_update_files, config_tokens, req); + } catch (const std::exception &e) { + Logger::error("[Routes] Unknown error in update_files: " + std::string(e.what())); + nlohmann::json response = { + {"status", 500}, + {"error", "Internal server error"} + }; + return crow::response(500, response.dump()); + } + }); - if (!config_run_actions.is_null()) { - Logger::info("Registering route \"/run-actions\""); - CROW_ROUTE(this->app, "/run-actions") - .methods("POST"_method) - .name("Run Actions") - ([&config_run_actions, &config_tokens](const crow::request &req) { - try { - return run_actions(config_run_actions, config_tokens, req); - } catch (const std::exception &e) { - Logger::error("Unknown error in run_actions: " + std::string(e.what())); - nlohmann::json response = { - {"status", 500}, - {"error", "Internal server error"} - }; - return crow::response(500, response.dump()); - } - }); - } + Logger::info("[Routes] Registering route \"/run-actions\""); + CROW_ROUTE(this->app, "/run-actions") + .methods("POST"_method) + .name("Run Actions") + ([&config_run_actions](const crow::request &req) { + if (config_run_actions.is_null()) { + Logger::warn("[Routes] No run-actions configuration found"); + nlohmann::json response = { + {"status", 404}, + {"error", "No run-actions configuration found"} + }; + return crow::response(404, response.dump()); + } + try { + return run_actions(config_run_actions, req); + } catch (const std::exception &e) { + Logger::error("[Routes] Unknown error in run_actions: " + std::string(e.what())); + nlohmann::json response = { + {"status", 500}, + {"error", "Internal server error"} + }; + return crow::response(500, response.dump()); + } + }); - Logger::info("Starting server"); + Logger::info("[Routes] Registering catch-all route (404)"); + CROW_CATCHALL_ROUTE(this->app) + ([](const crow::request &req) { + nlohmann::json response = { + {"status", 404}, + {"error", "Not found"} + }; + return crow::response(404, response.dump()); + }); + + Logger::info("[Routes] Routes registered"); + Logger::info("[Routes] Starting server"); try { this->app.port(config["port"].get()).multithreaded().run(); } catch (const std::exception &e) { - Logger::fatal("Error starting server: " + std::string(e.what())); + Logger::fatal("[Routes] Error starting server: " + std::string(e.what())); } - Logger::info("Server stopped"); + Logger::info("[Routes] Server stopped"); }