22#include "util/Mutex.hpp"
23#include "util/log/Logger.hpp"
24#include "util/newconfig/ConfigDefinition.hpp"
25#include "web/dosguard/DOSGuardInterface.hpp"
26#include "web/dosguard/WhitelistHandlerInterface.hpp"
28#include <boost/asio.hpp>
29#include <boost/iterator/transform_iterator.hpp>
30#include <boost/system/error_code.hpp>
36#include <unordered_map>
37#include <unordered_set>
39namespace web::dosguard {
51 std::uint32_t transferedByte = 0;
52 std::uint32_t requestsCount = 0;
56 std::unordered_map<std::string, ClientState> ipState;
57 std::unordered_map<std::string, std::uint32_t> ipConnCount;
61 std::reference_wrapper<WhitelistHandlerInterface const> whitelistHandler_;
63 std::uint32_t
const maxFetches_;
64 std::uint32_t
const maxConnCount_;
65 std::uint32_t
const maxRequestCount_;
85 isWhiteListed(std::string_view
const ip)
const noexcept override;
95 isOk(std::string
const& ip)
const noexcept override;
103 increment(std::string
const& ip)
noexcept override;
111 decrement(std::string
const& ip)
noexcept override;
125 [[maybe_unused]]
bool
126 add(std::string
const& ip, uint32_t numObjects)
noexcept override;
139 [[maybe_unused]]
bool
140 request(std::string
const& ip)
noexcept override;
146 clear()
noexcept override;
149 [[nodiscard]]
static std::unordered_set<std::string>
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:110
A container for data that is protected by a mutex. Inspired by Mutex in Rust.
Definition Mutex.hpp:96
All the config data will be stored and extracted from this class.
Definition ConfigDefinition.hpp:54
The interface of a denial of service guard.
Definition DOSGuardInterface.hpp:44
A simple denial of service guard used for rate limiting.
Definition DOSGuard.hpp:46
bool isWhiteListed(std::string_view const ip) const noexcept override
Check whether an ip address is in the whitelist or not.
Definition DOSGuard.cpp:49
bool request(std::string const &ip) noexcept override
Adds one request for the given ip address.
Definition DOSGuard.cpp:118
void clear() noexcept override
Instantly clears all fetch counters added by.
Definition DOSGuard.cpp:132
void increment(std::string const &ip) noexcept override
Increment connection count for the given ip address.
Definition DOSGuard.cpp:83
bool isOk(std::string const &ip) const noexcept override
Check whether an ip address is currently rate limited or not.
Definition DOSGuard.cpp:55
void decrement(std::string const &ip) noexcept override
Decrement connection count for the given ip address.
Definition DOSGuard.cpp:92
DOSGuard(util::config::ClioConfigDefinition const &config, WhitelistHandlerInterface const &whitelistHandler)
Constructs a new DOS guard.
Definition DOSGuard.cpp:40
bool add(std::string const &ip, uint32_t numObjects) noexcept override
Adds numObjects of usage for the given ip address.
Definition DOSGuard.cpp:104
Interface for a whitelist handler.
Definition WhitelistHandlerInterface.hpp:29