diff options
Diffstat (limited to 'src/coremods/core_xline/core_xline.h')
-rw-r--r-- | src/coremods/core_xline/core_xline.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/coremods/core_xline/core_xline.h b/src/coremods/core_xline/core_xline.h index c2e171410..6101d79bf 100644 --- a/src/coremods/core_xline/core_xline.h +++ b/src/coremods/core_xline/core_xline.h @@ -21,6 +21,50 @@ #include "inspircd.h" +class InsaneBan +{ + public: + class MatcherBase + { + public: + virtual long Run(const std::string& mask) = 0; + }; + + template <typename T> + class Matcher : public MatcherBase + { + public: + long Run(const std::string& mask) + { + long matches = 0; + const T* c = static_cast<T*>(this); + const user_hash& users = *ServerInstance->Users->clientlist; + for (user_hash::const_iterator i = users.begin(); i != users.end(); ++i) + { + if (c->Check(i->second, mask)) + matches++; + } + return matches; + } + }; + + class IPHostMatcher : public Matcher<IPHostMatcher> + { + public: + bool Check(User* user, const std::string& mask) const; + }; + + /** Check if the given mask matches too many users according to the config, send an announcement if yes + * @param mask A mask to match against + * @param test The test that determines if a user matches the mask or not + * @param user A user whose nick will be included in the announcement if one is made + * @param bantype Type of the ban being set, will be used in the announcement if one is made + * @param confkey Name of the config key (inside the insane tag) which if false disables any checking + * @return True if the given mask matches too many users, false if not + */ + static bool MatchesEveryone(const std::string& mask, MatcherBase& test, User* user, const char* bantype, const char* confkey); +}; + /** Handle /ELINE. */ class CommandEline : public Command @@ -76,6 +120,12 @@ class CommandKline : public Command */ class CommandQline : public Command { + class NickMatcher : public InsaneBan::Matcher<NickMatcher> + { + public: + bool Check(User* user, const std::string& mask) const; + }; + public: /** Constructor for qline. */ @@ -94,6 +144,12 @@ class CommandQline : public Command */ class CommandZline : public Command { + class IPMatcher : public InsaneBan::Matcher<IPMatcher> + { + public: + bool Check(User* user, const std::string& mask) const; + }; + public: /** Constructor for zline. */ |