From e6564cd519f92c099d123f8f892b170b05167715 Mon Sep 17 00:00:00 2001 From: Paul Lopez Date: Sat, 14 Dec 2024 21:53:04 -0500 Subject: [PATCH] Updated CorsFilter.cpp --- api/src/filters/CorsFilter.cpp | 39 ++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/api/src/filters/CorsFilter.cpp b/api/src/filters/CorsFilter.cpp index 49f35ca..8fd3590 100644 --- a/api/src/filters/CorsFilter.cpp +++ b/api/src/filters/CorsFilter.cpp @@ -1,4 +1,3 @@ -// CorsFilter.cpp #include "filters/CorsFilter.h" #include "utils/Logger.h" @@ -8,32 +7,46 @@ 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()); + API_LOG_DEBUG("Starting CORS filter for path: {} method: {}", req->getPath(), req->getMethodString()); + API_LOG_DEBUG("Request headers:"); + for (const auto& header : req->getHeaders()) { + API_LOG_DEBUG(" {}: {}", header.first, header.second); + } + // Handle preflight OPTIONS request if (req->getMethodString() == "OPTIONS") { - // Handle preflight request - API_LOG_DEBUG("Handling OPTIONS preflight request"); + API_LOG_DEBUG("Processing OPTIONS preflight request"); auto resp = drogon::HttpResponse::newHttpResponse(); // Add CORS headers for preflight 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"); - resp->addHeader("Access-Control-Max-Age", "86400"); + resp->addHeader("Access-Control-Allow-Headers", "*"); + resp->addHeader("Access-Control-Max-Age", "3600"); - // Important: Set status 200 for OPTIONS + // Set 200 OK status resp->setStatusCode(drogon::k200OK); + + API_LOG_DEBUG("Sending preflight response with headers:"); + for (const auto& header : resp->getHeaders()) { + API_LOG_DEBUG(" {}: {}", header.first, header.second); + } + fcb(resp); return; } - // For non-OPTIONS requests - auto resp = drogon::HttpResponse::newHttpResponse(); - 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"); + // For actual request + API_LOG_DEBUG("Processing actual request"); - // Continue with the request chain + // Continue with request chain and add CORS headers to the final response + auto modCallback = [fcb](const drogon::HttpResponsePtr& responsePtr) { + responsePtr->addHeader("Access-Control-Allow-Origin", "http://localhost:3000"); + responsePtr->addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); + responsePtr->addHeader("Access-Control-Allow-Headers", "*"); + fcb(responsePtr); + }; + fccb(); }