Add CORSMiddleware

This commit is contained in:
antao 2024-05-25 00:29:36 +08:00 committed by an-tao
parent 13d7148764
commit 8215fadbd9
3 changed files with 75 additions and 1 deletions

View File

@ -303,7 +303,8 @@ set(DROGON_SOURCES
lib/src/WebSocketClientImpl.cc
lib/src/WebSocketConnectionImpl.cc
lib/src/YamlConfigAdapter.cc
lib/src/drogon_test.cc)
lib/src/drogon_test.cc
lib/src/CORSMiddleware.cc)
set(private_headers
lib/src/AOPAdvice.h
lib/src/CacheFile.h
@ -588,6 +589,7 @@ set(DROGON_HEADERS
lib/inc/drogon/PubSubService.h
lib/inc/drogon/drogon_test.h
lib/inc/drogon/RateLimiter.h
lib/inc/drogon/CORSMiddleware.h
${CMAKE_CURRENT_BINARY_DIR}/exports/drogon/exports.h)
set(private_headers
${private_headers}

View File

@ -0,0 +1,72 @@
/**
*
* @file CORSMiddleware.h
* @author An Tao
*
* Copyright 2018, An Tao. All rights reserved.
* https://github.com/an-tao/drogon
* Use of this source code is governed by a MIT license
* that can be found in the License file.
*
* Drogon
*
*/
#pragma once
#include <drogon/HttpMiddleware.h>
namespace drogon
{
/**
* @brief This class represents a middleware that adds CORS headers to the
* response.
*/
class CORSMiddleware : public HttpMiddleware<CORSMiddleware>
{
public:
CORSMiddleware()
{
}
void invoke(const HttpRequestPtr &req,
MiddlewareNextCallback &&nextCb,
MiddlewareCallback &&mcb) override;
void setAllowOrigins(const std::vector<std::string> &origins)
{
allowOrigins_ = origins;
}
void setAllowHeaders(const std::vector<std::string> &headers)
{
allowHeaders_ = headers;
}
void setAllowCredentials(bool allowCredentials)
{
allowCredentials_ = allowCredentials;
}
void setExposeHeaders(const std::vector<std::string> &headers)
{
exposeHeaders_ = headers;
}
void setOriginRegex(const std::string &regex)
{
originRegex_ = regex;
}
void setMaxAge(int maxAge)
{
maxAge_ = maxAge;
}
private:
std::vector<std::string> allowOrigins_;
std::vector<std::string> allowHeaders_;
std::vector<std::string> exposeHeaders_;
bool allowCredentials_{false};
std::string originRegex_;
int maxAge_{0};
};
} // namespace drogon

View File