100 std::function<std::optional<std::string>(
const HttpRequestPtr &)> func)
102 userIdGetter_ = std::move(func);
111 std::function<HttpResponsePtr(
const HttpRequestPtr &)> func)
113 rejectResponseFactory_ = std::move(func);
119 std::regex urlsRegex;
121 size_t ipCapacity{0};
122 size_t userCapacity{0};
123 bool regexFlag{
false};
124 RateLimiterPtr globalLimiterPtr;
125 std::unique_ptr<CacheMap<std::string, RateLimiterPtr>> ipLimiterMapPtr;
126 std::unique_ptr<CacheMap<std::string, RateLimiterPtr>>
130 LimitStrategy makeLimitStrategy(
const Json::Value &config);
131 std::vector<LimitStrategy> limitStrategies_;
132 RateLimiterType algorithm_{RateLimiterType::kTokenBucket};
133 std::chrono::duration<double> timeUnit_{1.0};
134 bool multiThreads_{
true};
135 bool useRealIpResolver_{
false};
136 size_t limiterExpireTime_{600};
137 std::function<std::optional<std::string>(
const drogon::HttpRequestPtr &)>
139 std::function<HttpResponsePtr(
const drogon::HttpRequestPtr &)>
140 rejectResponseFactory_;
142 RealIpResolver::CIDRs trustCIDRs_;
144 void onHttpRequest(
const drogon::HttpRequestPtr &,
146 AdviceChainCallback &&);
147 bool checkLimit(
const drogon::HttpRequestPtr &req,
148 const LimitStrategy &strategy,
149 const trantor::InetAddress &ip,
150 const std::optional<std::string> &userId);
151 HttpResponsePtr rejectResponse_;