diff --git a/api/include/filters/CorsFilter.h b/api/include/filters/CorsFilter.h index 7e2e20c..a6988cd 100644 --- a/api/include/filters/CorsFilter.h +++ b/api/include/filters/CorsFilter.h @@ -1,3 +1,4 @@ +// CorsFilter.h #ifndef QUANT_FIN_API_CORS_FILTER_H #define QUANT_FIN_API_CORS_FILTER_H #include diff --git a/api/src/filters/CorsFilter.cpp b/api/src/filters/CorsFilter.cpp index 26f1e17..c8f1a18 100644 --- a/api/src/filters/CorsFilter.cpp +++ b/api/src/filters/CorsFilter.cpp @@ -1,3 +1,4 @@ +// CorsFilter.cpp #include "filters/CorsFilter.h" #include "utils/Logger.h" @@ -7,15 +8,15 @@ namespace api { void CorsFilter::doFilter(const drogon::HttpRequestPtr& req, drogon::FilterCallback&& fcb, drogon::FilterChainCallback&& fccb) { - API_LOG_DEBUG("Processing CORS request for path: {}", req->getPath()); + // Create response for handling CORS auto resp = drogon::HttpResponse::newHttpResponse(); - // Add CORS headers - resp->addHeader("Access-Control-Allow-Origin", "*"); - resp->addHeader("Access-Control-Allow-Methods", "OPTIONS,GET,POST,HEAD"); - resp->addHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); + // Add CORS headers matching your config + resp->addHeader("Access-Control-Allow-Origin", "http://localhost:3000"); + resp->addHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS"); + resp->addHeader("Access-Control-Allow-Headers", "Content-Type,Authorization"); resp->addHeader("Access-Control-Max-Age", "86400"); // Handle preflight request @@ -26,7 +27,13 @@ void CorsFilter::doFilter(const drogon::HttpRequestPtr& req, return; } - // For non-OPTIONS requests, continue with the chain but with CORS headers + // For non-OPTIONS requests, add CORS headers to the response + req->addHeader("Access-Control-Allow-Origin", "http://localhost:3000"); + req->addHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS"); + req->addHeader("Access-Control-Allow-Headers", "Content-Type,Authorization"); + req->addHeader("Access-Control-Max-Age", "86400"); + + // Continue with the request chain fccb(); } diff --git a/api/src/main.cpp b/api/src/main.cpp index ca9a38c..0a7ecff 100644 --- a/api/src/main.cpp +++ b/api/src/main.cpp @@ -18,17 +18,12 @@ int main() { // Configure server auto& app = drogon::app(); - // Load config and setup - app.loadConfigFile("config.json"); - app.addListener("0.0.0.0", 8080); + // Load config from the api directory + app.loadConfigFile("api/config.json"); - // Register CORS filter for all paths using path patterns - drogon::app().registerPreHandlingAdvice( - [](const drogon::HttpRequestPtr& req, drogon::AdviceCallback&& acb, drogon::AdviceChainCallback&& accb) { - auto corsFilter = std::make_shared(); - corsFilter->doFilter(req, std::move(acb), std::move(accb)); - } - ); + // Create the CORS filter + auto corsFilter = std::make_shared(); + app.registerFilter(corsFilter); API_LOG_INFO("Server configuration loaded successfully"); API_LOG_INFO("Starting server on port 8080"); diff --git a/logs/api_2024-12-14.log b/logs/api_2024-12-14.log new file mode 100644 index 0000000..0479427 --- /dev/null +++ b/logs/api_2024-12-14.log @@ -0,0 +1,5 @@ +[2024-12-14 20:28:37.636] [API] [info] [10111] Starting Quantitative Finance API server +[2024-12-14 20:28:37.637] [API] [critical] [10111] Fatal error during server startup: Config file config.json not found! +[2024-12-14 20:32:06.597] [API] [info] [10367] Starting Quantitative Finance API server +[2024-12-14 20:32:06.597] [API] [info] [10367] Server configuration loaded successfully +[2024-12-14 20:32:06.597] [API] [info] [10367] Starting server on port 8080