1#ifndef MSTL_NETWORK_HTTP_FILTER_HPP__
2#define MSTL_NETWORK_HTTP_FILTER_HPP__
3#include "http_server_message.hpp"
6class MSTL_API http_filter {
8 virtual ~http_filter() =
default;
9 virtual void do_filter(http_request& request, http_response& response) = 0;
10 virtual bool pre_filter(http_request& request, http_response& response) {
return true; }
11 virtual void post_filter(http_request& request, http_response& response) {}
15class MSTL_API http_filter_chain {
17 vector<http_filter*> filters_;
20 void add_filter(http_filter* filter) { filters_.push_back(filter); }
21 void clean_filter() noexcept;
23 bool execute_pre_filters(http_request& request, http_response& response);
24 void execute_post_filters(http_request& request, http_response& response);
25 void execute_filters(http_request& request, http_response& response);
33class MSTL_API cors_filter final :
public http_filter {
35 string allowed_origins_ =
"*";
36 HTTP_METHOD allowed_methods_ = HTTP_METHOD::DEFAULT;
37 string allowed_headers_ =
"Content-Type, Cookie, Accept, X-Requested-With";
38 bool allow_credentials_ =
true;
39 size_t max_age_ = 86400;
42 cors_filter() =
default;
44 explicit cors_filter(
string origins,
45 HTTP_METHOD methods = HTTP_METHOD::GET & HTTP_METHOD::POST & HTTP_METHOD::OPTIONS,
46 string headers =
"Content-Type, Cookie, Accept, X-Requested-With",
47 const bool credentials =
true,
48 const size_t max_age = 86400) :
50 allowed_headers_(
_MSTL move(headers)), allow_credentials_(credentials),
53 void set_allowed_origins(
string origins) { allowed_origins_ =
_MSTL move(origins); }
54 void set_allowed_methods(HTTP_METHOD methods) { allowed_methods_ =
_MSTL move(methods); }
55 void set_allowed_headers(
string headers) { allowed_headers_ =
_MSTL move(headers); }
56 void set_allowed_credentials(
const bool credentials) { allow_credentials_ = credentials; }
57 void set_max_age(
const size_t max_age) { max_age_ = max_age; }
59 bool pre_filter(http_request& request, http_response& response)
override;
60 void do_filter(http_request& request, http_response& response)
override {}
63class MSTL_API logging_filter final :
public http_filter {
65 bool pre_filter(http_request& request, http_response& response)
override;
66 void post_filter(http_request& request, http_response& response)
override;
67 void do_filter(http_request& request, http_response& response)
override {}
70class MSTL_API static_file_filter final :
public http_filter {
73 unordered_map<string, HTTP_CONTENT> mime_types_;
76 explicit static_file_filter(
string root_path);
78 bool pre_filter(http_request& request, http_response& response)
override;
79 void do_filter(http_request& request, http_response& response)
override {}
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素