#include "common/Cors.h" #include namespace visione::cors { namespace { std::string allowedOrigin() { return drogon::app() .getCustomConfig()["cors"] .get("allowed_origin", "http://localhost:5173") .asString(); } bool isAllowed(const drogon::HttpRequestPtr &request) { return request->getHeader("Origin") == allowedOrigin(); } void addHeaders(const drogon::HttpRequestPtr &request, const drogon::HttpResponsePtr &response) { if (!isAllowed(request)) { return; } response->addHeader("Access-Control-Allow-Origin", allowedOrigin()); response->addHeader("Access-Control-Allow-Credentials", "true"); response->addHeader("Access-Control-Allow-Methods", "GET,POST,PATCH,DELETE,OPTIONS"); response->addHeader("Access-Control-Allow-Headers", "Authorization,Content-Type"); } } // namespace void configure() { drogon::app().registerSyncAdvice( [](const drogon::HttpRequestPtr &request) -> drogon::HttpResponsePtr { if (request->method() != drogon::Options) { return nullptr; } auto response = drogon::HttpResponse::newHttpResponse(); response->setStatusCode(drogon::k204NoContent); addHeaders(request, response); return response; }); drogon::app().registerPostHandlingAdvice( [](const drogon::HttpRequestPtr &request, const drogon::HttpResponsePtr &response) { addHeaders(request, response); }); } } // namespace visione::cors