diff options
Diffstat (limited to 'modules/nickserv/ns_maxemail.cpp')
-rw-r--r-- | modules/nickserv/ns_maxemail.cpp | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/modules/nickserv/ns_maxemail.cpp b/modules/nickserv/ns_maxemail.cpp deleted file mode 100644 index 973c3158e..000000000 --- a/modules/nickserv/ns_maxemail.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* ns_maxemail.cpp - Limit the amount of times an email address - * can be used for a NickServ account. - * - * (C) 2003-2025 Anope Team - * Contact us at team@anope.org - * - * Included in the Anope module pack since Anope 1.7.9 - * Anope Coder: GeniusDex <geniusdex@anope.org> - * - * Please read COPYING and README for further details. - */ - -#include "module.h" - -class NSMaxEmail final - : public Module -{ - bool clean = false; - - /* strip dots from username, and remove anything after the first + */ - static Anope::string CleanMail(const Anope::string &email) - { - size_t host = email.find('@'); - if (host == Anope::string::npos) - return email; - - Anope::string username = email.substr(0, host); - username = username.replace_all_cs(".", ""); - - size_t sz = username.find('+'); - if (sz != Anope::string::npos) - username = username.substr(0, sz); - - Anope::string cleaned = username + email.substr(host); - Log(LOG_DEBUG) << "cleaned " << email << " to " << cleaned; - return cleaned; - } - - bool CheckLimitReached(CommandSource &source, const Anope::string &email, bool ignoreself) - { - const auto NSEmailMax = Config->GetModule(this).Get<unsigned>("maxemails"); - if (NSEmailMax < 1 || email.empty()) - return false; - - if (this->CountEmail(email, ignoreself ? source.GetAccount() : NULL) < NSEmailMax) - return false; - - source.Reply(NSEmailMax, N_("The email address \002%s\002 has reached its usage limit of %u user.", "The email address \002%s\002 has reached its usage limit of %u users."), email.c_str(), NSEmailMax); - return true; - } - - unsigned CountEmail(const Anope::string &email, NickCore *unc) - { - unsigned count = 0; - - if (email.empty()) - return 0; - - Anope::string cleanemail = clean ? CleanMail(email) : email; - - for (const auto &[_, nc] : *NickCoreList) - { - Anope::string cleannc = clean ? CleanMail(nc->email) : nc->email; - - if (unc != nc && cleanemail.equals_ci(cleannc)) - ++count; - } - - return count; - } - -public: - NSMaxEmail(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR) - { - } - - void OnReload(Configuration::Conf &conf) override - { - clean = conf.GetModule(this).Get<bool>("remove_aliases", "true"); - } - - EventReturn OnPreCommand(CommandSource &source, Command *command, std::vector<Anope::string> ¶ms) override - { - if (source.IsOper()) - return EVENT_CONTINUE; - - if (command->name == "nickserv/register") - { - if (this->CheckLimitReached(source, params.size() > 1 ? params[1] : "", false)) - return EVENT_STOP; - } - else if (command->name == "nickserv/set/email") - { - if (this->CheckLimitReached(source, params.size() > 0 ? params[0] : "", true)) - return EVENT_STOP; - } - else if (command->name == "nickserv/ungroup" && source.GetAccount()) - { - if (this->CheckLimitReached(source, source.GetAccount()->email, false)) - return EVENT_STOP; - } - - return EVENT_CONTINUE; - } -}; - -MODULE_INIT(NSMaxEmail) |