Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
DistributedRateLimiter.hpp
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <chrono>
4#include <memory>
8
9namespace middleware {
10
16public:
25 DistributedRateLimiter(const std::string& redis_host, int redis_port, size_t max_requests, std::chrono::seconds window);
26
35 bool operator()(http::HttpRequest& req, std::shared_ptr<http::ResponseWriter> writer);
36
37private:
38 size_t max_requests_;
39 std::chrono::seconds window_;
40 std::unique_ptr<database::RedisClient> redis_;
41};
42
53inline auto distributed_rate_limit(const std::string& redis_host, int redis_port, size_t max_requests, std::chrono::seconds window) {
54 return [limiter = std::make_shared<DistributedRateLimiter>(redis_host, redis_port, max_requests, window)]
55 (http::HttpRequest& req, std::shared_ptr<http::ResponseWriter> writer) -> bool {
56 return (*limiter)(req, writer);
57 };
58}
59
60} // namespace middleware
Distributed rate limiter middleware using Redis.
Definition DistributedRateLimiter.hpp:15
bool operator()(http::HttpRequest &req, std::shared_ptr< http::ResponseWriter > writer)
Middleware execution operator.
Definition DistributedRateLimiter.cpp:9
auto distributed_rate_limit(const std::string &redis_host, int redis_port, size_t max_requests, std::chrono::seconds window)
Helper to create a distributed rate limiting middleware handler.
Definition DistributedRateLimiter.hpp:53
Definition Compress.hpp:4
Represents an incoming HTTP request.
Definition HttpRequest.hpp:22