diff --git a/src/gatekeeper/dosdetector/dosdetector.cpp b/src/gatekeeper/dosdetector/dosdetector.cpp index 5c1e1ab..7181c84 100644 --- a/src/gatekeeper/dosdetector/dosdetector.cpp +++ b/src/gatekeeper/dosdetector/dosdetector.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -38,7 +39,7 @@ DOSDetector::~DOSDetector() } } -DOSDetector::Status DOSDetector::is_dos_attack(const Request &request) +DOSDetector::Status DOSDetector::is_dos_attack(const Request &&request) { try { @@ -53,7 +54,7 @@ DOSDetector::Status DOSDetector::is_dos_attack(const Request &request) if (isRateLimited(request.ip)) { - processRequest(request); + processRequest(request); return Status::RATELIMITED; } @@ -62,7 +63,7 @@ DOSDetector::Status DOSDetector::is_dos_attack(const Request &request) return Status::BANNED; } - return processRequest(request); + return processRequest(request); } catch (const std::exception &e) { @@ -220,22 +221,22 @@ inline bool __attribute((always_inline)) DOSDetector::regexFind(std::string_view { std::lock_guard lock(mtx); - return std::any_of(list.begin(), list.end(), - [&remote_ip](const std::string_view &pattern) - { - try - { - std::regex regex_pattern(pattern.data()); - return std::regex_search(remote_ip.data(), regex_pattern); - } - catch (const std::regex_error &e) - { - Message::ErrorMessage("Exception due to invalid regex pattern."); - Message::CriticalMessage(e.what()); - - return false; - } - }); + return std::ranges::any_of(list, + [&remote_ip](const std::string_view &pattern) + { + try + { + std::regex regex_pattern((std::string(pattern))); + return std::regex_search((std::string(remote_ip)), regex_pattern); + } + catch (const std::regex_error &e) + { + Message::ErrorMessage("Exception due to invalid regex pattern."); + Message::CriticalMessage(e.what()); + + return false; + } + }); } catch (const std::exception &e) { @@ -305,8 +306,7 @@ inline bool __attribute((always_inline)) DOSDetector::checkStatus(std::string_vi } } -template -DOSDetector::Status DOSDetector::processRequest(const Request &&request) +DOSDetector::Status DOSDetector::processRequest(const Request &request) { try { diff --git a/src/gatekeeper/dosdetector/dosdetector.hpp b/src/gatekeeper/dosdetector/dosdetector.hpp index 8dc7a0b..cdb0a44 100644 --- a/src/gatekeeper/dosdetector/dosdetector.hpp +++ b/src/gatekeeper/dosdetector/dosdetector.hpp @@ -35,7 +35,7 @@ class DOSDetector DOSDetector(); virtual ~DOSDetector(); - DOSDetector::Status is_dos_attack(const Request &request); + DOSDetector::Status is_dos_attack(const Request &&request); private: std::shared_ptr configurator_ = Store::getObject(); @@ -72,6 +72,5 @@ class DOSDetector template inline bool __attribute((always_inline)) checkStatus(std::string_view remote_ip, Map &ip_map, Mutex &mtx); - template - DOSDetector::Status processRequest(const Request &&request); + Status processRequest(const Request &request); }; diff --git a/src/gatekeeper/gatekeeper.cpp b/src/gatekeeper/gatekeeper.cpp index cc79353..16333f0 100644 --- a/src/gatekeeper/gatekeeper.cpp +++ b/src/gatekeeper/gatekeeper.cpp @@ -92,7 +92,7 @@ void GateKeeper::removeSession(std::optional client_id, const std::str } // bool GateKeeper::hasPermission(CALLBACK_&& callback, std::string_view data) { return false; } -DOSDetector::Status GateKeeper::isDosAttack(const DOSDetector::Request& request) { return dosDetector_->is_dos_attack(request); } +DOSDetector::Status GateKeeper::isDosAttack(const DOSDetector::Request& request) { return dosDetector_->is_dos_attack(std::move(request)); } std::optional GateKeeper::parse_data(std::string_view data, std::string& message, bool& success) {