Add local CORS
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
#include "common/Cors.h"
|
||||
|
||||
#include <drogon/drogon.h>
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user