diff options
author | Sadie Powell <sadie@witchery.services> | 2025-04-03 13:44:59 +0100 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2025-04-05 06:53:40 +0100 |
commit | e4f88d44cdf253873e2d80267ab0587bc820d87a (patch) | |
tree | f4ab55c92305295212715e6a9a9d6b1313f86166 /modules | |
parent | 063b4a9918f38de5d3e2509c88e80a24a082a188 (diff) |
Deduplicate checks in ns_cert.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/nickserv/ns_cert.cpp | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/modules/nickserv/ns_cert.cpp b/modules/nickserv/ns_cert.cpp index d5b6923c2..f89199565 100644 --- a/modules/nickserv/ns_cert.cpp +++ b/modules/nickserv/ns_cert.cpp @@ -383,6 +383,23 @@ class NSCert final NSCertListImpl::ExtensibleItem certs; CertServiceImpl cs; + bool CanLogin(User *u, NickCore *nc) + { + if (!nc || nc->HasExt("NS_SUSPENDED")) + return false; // Account suspended. + + const auto maxlogins = Config->GetModule("ns_identify").Get<unsigned int>("maxlogins"); + if (maxlogins && nc->users.size() >= maxlogins) + { + auto *nickserv = Config->GetClient("NickServ"); + u->SendMessage(nickserv, _("Account \002%s\002 has already reached the maximum number of simultaneous logins (%u)."), + nc->display.c_str(), maxlogins); + return false; + } + + return true; + } + public: NSCert(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), commandnscert(this), certs(this, "certificates"), cs(this) @@ -393,20 +410,12 @@ public: void OnFingerprint(User *u) override { - BotInfo *NickServ = Config->GetClient("NickServ"); - if (!NickServ || u->IsIdentified()) + if (u->IsIdentified()) return; NickCore *nc = cs.FindAccountFromCert(u->fingerprint); - if (!nc || nc->HasExt("NS_SUSPENDED")) - return; - - unsigned int maxlogins = Config->GetModule("ns_identify").Get<unsigned int>("maxlogins"); - if (maxlogins && nc->users.size() >= maxlogins) - { - u->SendMessage(NickServ, _("Account \002%s\002 has already reached the maximum number of simultaneous logins (%u)."), nc->display.c_str(), maxlogins); + if (!CanLogin(u, nc)) return; - } NickAlias *na = NickAlias::Find(u->nick); if (na && na->nc == nc) @@ -414,6 +423,7 @@ public: else u->Login(nc); + auto *NickServ = Config->GetClient("NickServ"); u->SendMessage(NickServ, _("SSL certificate fingerprint accepted, you are now identified to \002%s\002."), nc->display.c_str()); Log(NickServ) << u->GetMask() << " automatically identified for account " << nc->display << " via SSL certificate fingerprint"; } @@ -435,17 +445,12 @@ public: NSCertList *cl = certs.Get(na->nc); if (!u->fingerprint.empty() && cl && cl->FindCert(u->fingerprint)) { - BotInfo *NickServ = Config->GetClient("NickServ"); - - unsigned int maxlogins = Config->GetModule("ns_identify").Get<unsigned int>("maxlogins"); - if (maxlogins && na->nc->users.size() >= maxlogins) - { - u->SendMessage(NickServ, _("Account \002%s\002 has already reached the maximum number of simultaneous logins (%u)."), na->nc->display.c_str(), maxlogins); + if (!CanLogin(u, na->nc)) return EVENT_CONTINUE; - } u->Identify(na); + auto *NickServ = Config->GetClient("NickServ"); u->SendMessage(NickServ, _("SSL certificate fingerprint accepted, you are now identified.")); Log(NickServ) << u->GetMask() << " automatically identified for account " << na->nc->display << " via SSL certificate fingerprint"; return EVENT_ALLOW; |