MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
http_filter.hpp
1#ifndef MSTL_NETWORK_HTTP_FILTER_HPP__
2#define MSTL_NETWORK_HTTP_FILTER_HPP__
3#include "http_server_message.hpp"
5
6class MSTL_API http_filter {
7public:
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) {}
12};
13
14
15class MSTL_API http_filter_chain {
16private:
17 vector<http_filter*> filters_;
18
19public:
20 void add_filter(http_filter* filter) { filters_.push_back(filter); }
21 void clean_filter() noexcept;
22
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);
26};
27
28
29#ifdef DELETE
30#undef DELETE
31#endif
32
33class MSTL_API cors_filter final : public http_filter {
34private:
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;
40
41public:
42 cors_filter() = default;
43
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) :
49 allowed_origins_(_MSTL move(origins)), allowed_methods_(_MSTL move(methods)),
50 allowed_headers_(_MSTL move(headers)), allow_credentials_(credentials),
51 max_age_(max_age) {}
52
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; }
58
59 bool pre_filter(http_request& request, http_response& response) override;
60 void do_filter(http_request& request, http_response& response) override {}
61};
62
63class MSTL_API logging_filter final : public http_filter {
64public:
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 {}
68};
69
70class MSTL_API static_file_filter final : public http_filter {
71private:
72 string root_path_;
73 unordered_map<string, HTTP_CONTENT> mime_types_;
74
75public:
76 explicit static_file_filter(string root_path);
77
78 bool pre_filter(http_request& request, http_response& response) override;
79 void do_filter(http_request& request, http_response& response) override {}
80};
81
83#endif // MSTL_NETWORK_HTTP_FILTER_HPP__
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素