diff options
Diffstat (limited to 'modules/ns_maxemail.cpp')
| -rw-r--r-- | modules/ns_maxemail.cpp | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/modules/ns_maxemail.cpp b/modules/ns_maxemail.cpp deleted file mode 100644 index 135381a59..000000000 --- a/modules/ns_maxemail.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* ns_maxemail.cpp - Limit the amount of times an email address - * can be used for a NickServ account. - * - * (C) 2003-2024 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 + */ - 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) - { - int NSEmailMax = Config->GetModule(this)->Get<int>("maxemails"); - - if (NSEmailMax < 1 || email.empty()) - return false; - - if (this->CountEmail(email, source.nc) < NSEmailMax) - return false; - - if (NSEmailMax == 1) - source.Reply(_("The email address \002%s\002 has reached its usage limit of 1 user."), email.c_str()); - else - source.Reply(_("The email address \002%s\002 has reached its usage limit of %d users."), email.c_str(), NSEmailMax); - - return true; - } - - int CountEmail(const Anope::string &email, NickCore *unc) - { - int 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] : "")) - return EVENT_STOP; - } - else if (command->name == "nickserv/set/email") - { - if (this->CheckLimitReached(source, params.size() > 0 ? params[0] : "")) - return EVENT_STOP; - } - else if (command->name == "nickserv/ungroup" && source.GetAccount()) - { - if (this->CheckLimitReached(source, source.GetAccount()->email)) - return EVENT_STOP; - } - - return EVENT_CONTINUE; - } -}; - -MODULE_INIT(NSMaxEmail) |
