Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
RateLimiter.hpp
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <unordered_map>
4#include <mutex>
5#include <chrono>
6#include <functional>
7#include <memory>
10
11namespace middleware {
12
18public:
25 RateLimiter(size_t max_requests, std::chrono::seconds window);
26
35 bool operator()(http::HttpRequest& req, std::shared_ptr<http::ResponseWriter> writer);
36
37private:
38 struct Bucket {
39 size_t tokens;
40 std::chrono::steady_clock::time_point last_refill;
41 };
42
43 size_t max_requests_;
44 std::chrono::seconds window_;
45 std::unordered_map<std::string, Bucket> buckets_;
46 std::mutex mutex_;
47};
48
57inline auto rate_limit(size_t max_requests, std::chrono::seconds window) {
58 return [limiter = std::make_shared<RateLimiter>(max_requests, window)](http::HttpRequest& req, std::shared_ptr<http::ResponseWriter> writer) -> bool {
59 return (*limiter)(req, writer);
60 };
61}
62
63} // namespace middleware
Middleware for in-memory rate limiting.
Definition RateLimiter.hpp:17
bool operator()(http::HttpRequest &req, std::shared_ptr< http::ResponseWriter > writer)
Middleware execution operator.
Definition RateLimiter.cpp:9
auto rate_limit(size_t max_requests, std::chrono::seconds window)
Helper function to easily register rate limiting middleware.
Definition RateLimiter.hpp:57
Definition Compress.hpp:4
Represents an incoming HTTP request.
Definition HttpRequest.hpp:22