1#ifndef NEFORCE_NETWORK_HTTP_HTTP_FILTER_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP_FILTER_HPP__
30NEFORCE_BEGIN_NAMESPACE__
86 NEFORCE_NODISCARD
virtual string name()
const {
return "http_filter"; }
95class NEFORCE_API http_filter_chain {
98 bool owns_filters_ =
true;
101 http_filter_chain() =
default;
108 owns_filters_(owns_filters) {}
137 NEFORCE_NODISCARD
size_t size() const noexcept {
return filters_.size(); }
143 NEFORCE_NODISCARD
bool empty() const noexcept {
return filters_.empty(); }
194 NEFORCE_NODISCARD
string name()
const override {
return "cors_filter"; }
212 NEFORCE_NODISCARD
string name()
const override {
return "logging_filter"; }
225 bool enable_cache_ =
true;
237 NEFORCE_NODISCARD
string name()
const override {
return "static_file_filter"; }
271 struct rate_limit_info {
291 void set_max_requests(
const size_t max_request) { max_requests = max_request; }
292 void set_window(
const seconds window) { window_seconds = window; }
296 string name()
const override {
return "rate_limit_filter"; }
312class NEFORCE_API authentication_filter final :
public http_filter {
317 bool is_path_excluded(
const string&
path)
const;
320 authentication_filter() =
default;
327 auth_validator_(_NEFORCE
move(validator)) {}
334 auth_validator_ = _NEFORCE
move(validator);
350 NEFORCE_NODISCARD
string name()
const override {
return "authentication_filter"; }
356NEFORCE_END_NAMESPACE__
bool pre_filter(http_request &request, http_response &response) override
预处理方法
void do_filter(http_request &request, http_response &response) override
核心过滤方法
NEFORCE_NODISCARD string name() const override
获取过滤器名称
void clear_excluded_paths()
清除所有排除路径
void add_excluded_path(string path)
添加排除路径
void set_auth_validator(function< bool(const http_request &)> validator)
设置认证验证器
authentication_filter(function< bool(const http_request &)> validator)
构造函数
string allowed_origins
允许的源
bool allow_credentials
是否允许携带凭证
void do_filter(http_request &request, http_response &response) override
核心过滤方法
string allowed_headers
允许的请求头
http_method allowed_methods
允许的方法
cors_filter(string origins)
构造函数
bool pre_filter(http_request &request, http_response &response) override
预处理方法
NEFORCE_NODISCARD string name() const override
获取过滤器名称
static NEFORCE_NODISCARD datetime now() noexcept
获取当前本地时间
NEFORCE_NODISCARD bool empty() const noexcept
检查过滤器链是否为空
void add_filter(unique_ptr< http_filter > filter)
添加过滤器(转移所有权)
NEFORCE_NODISCARD size_t size() const noexcept
获取过滤器数量
http_filter_chain(const bool owns_filters)
构造函数
void execute_post_filters(http_request &request, http_response &response)
执行所有后过滤器
void add_filter_ref(http_filter *filter)
添加过滤器(不转移所有权)
void execute_filters(http_request &request, http_response &response)
执行所有核心过滤器
void clear() noexcept
清空所有过滤器
bool execute_pre_filters(http_request &request, http_response &response)
执行所有预过滤器
virtual void do_filter(http_request &request, http_response &response)=0
核心过滤方法
virtual NEFORCE_NODISCARD string name() const
获取过滤器名称
virtual bool pre_filter(http_request &request, http_response &response)
预处理方法
virtual void post_filter(http_request &request, http_response &response)
后处理方法
bool log_headers
是否记录请求/响应头
byte_size max_body_log_size
最大记录正文大小
void do_filter(http_request &request, http_response &response) override
核心过滤方法
bool pre_filter(http_request &request, http_response &response) override
预处理方法
NEFORCE_NODISCARD string name() const override
获取过滤器名称
void post_filter(http_request &request, http_response &response) override
后处理方法
size_t max_requests
窗口内最大请求数
bool pre_filter(http_request &request, http_response &response) override
预处理方法
string name() const override
获取过滤器名称
rate_limit_filter(const size_t max_requests=100, const seconds window=seconds(60))
构造函数
seconds window_seconds
时间窗口
void cleanup_old_entries()
清理过期的条目
void do_filter(http_request &request, http_response &response) override
核心过滤方法
NEFORCE_NODISCARD string name() const override
获取过滤器名称
void add_mime_type(const string &extension, http_content content_type)
添加MIME类型映射
static_file_filter(string root_path)
构造函数
static NEFORCE_NODISCARD bool is_safe_path(const string &path)
检查路径是否安全
void do_filter(http_request &request, http_response &response) override
核心过滤方法
bool pre_filter(http_request &request, http_response &response) override
预处理方法
NEFORCE_NODISCARD optional< http_content > get_mime_type(const string &path) const
获取MIME类型
constexpr iter_difference_t< Iterator > count(Iterator first, Iterator last, const T &value)
统计范围内等于指定值的元素数量
duration< int64_t > seconds
秒持续时间
http_server_response http_response
HTTP响应类型别名
http_server_request http_request
HTTP请求类型别名
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
static const http_method & DEFAULT()
默认方法