summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2025-04-03 13:44:59 +0100
committerSadie Powell <sadie@witchery.services>2025-04-05 06:53:40 +0100
commite4f88d44cdf253873e2d80267ab0587bc820d87a (patch)
treef4ab55c92305295212715e6a9a9d6b1313f86166 /modules
parent063b4a9918f38de5d3e2509c88e80a24a082a188 (diff)
Deduplicate checks in ns_cert.
Diffstat (limited to 'modules')
-rw-r--r--modules/nickserv/ns_cert.cpp39
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;