summaryrefslogtreecommitdiff
path: root/modules/pseudoclients
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-01-02 13:59:33 -0500
committerAdam <Adam@anope.org>2013-01-02 13:59:33 -0500
commit827469600e8cf98fea7aec09ceaa77a097300b72 (patch)
tree6c957be4e9f2a0c8c6eddf2537b8553f1f6ffdbb /modules/pseudoclients
parentbf718e869892bf418051d0140d7628c69d4ee3c9 (diff)
Move nickserv validate stuff to an event in nickserv.cpp
Diffstat (limited to 'modules/pseudoclients')
-rw-r--r--modules/pseudoclients/nickserv.cpp38
-rw-r--r--modules/pseudoclients/nickserv.h1
2 files changed, 32 insertions, 7 deletions
diff --git a/modules/pseudoclients/nickserv.cpp b/modules/pseudoclients/nickserv.cpp
index dd7efcabc..9e15667f5 100644
--- a/modules/pseudoclients/nickserv.cpp
+++ b/modules/pseudoclients/nickserv.cpp
@@ -129,6 +129,14 @@ class MyNickServService : public NickServService
}
}
+
+ void Login(User *user, NickAlias *na) anope_override
+ {
+ const NickAlias *u_na = NickAlias::Find(user->nick);
+ user->Login(na->nc);
+ if (u_na && *u_na->nc == *na->nc && !Config->NoNicknameOwnership && na->nc->HasFlag(NI_UNCONFIRMED) == false)
+ user->SetMode(NickServ, UMODE_REGISTERED);
+ }
};
class ExpireCallback : public CallBack
@@ -190,7 +198,7 @@ class NickServCore : public Module
throw ModuleException("No bot named " + Config->NickServ);
Implementation i[] = { I_OnBotDelete, I_OnDelNick, I_OnDelCore, I_OnChangeCoreDisplay, I_OnNickIdentify, I_OnNickGroup,
- I_OnNickUpdate, I_OnUserNickChange, I_OnPreHelp, I_OnPostHelp, I_OnUserConnect };
+ I_OnNickUpdate, I_OnUserConnect, I_OnServerSync, I_OnUserNickChange, I_OnPreHelp, I_OnPostHelp };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
}
@@ -295,6 +303,28 @@ class NickServCore : public Module
}
}
+ void OnUserConnect(Reference<User> &u, bool &exempt) anope_override
+ {
+ if (!u || !u->server->IsSynced())
+ return;
+
+ const NickAlias *na = NickAlias::Find(u->nick);
+ if (!Config->NoNicknameOwnership && !Config->NSUnregisteredNotice.empty() && !na)
+ u->SendMessage(NickServ, Config->NSUnregisteredNotice);
+ else if (na)
+ this->mynickserv.Validate(u);
+ }
+
+ void OnServerSync(Server *s) anope_override
+ {
+ for (user_map::const_iterator it = UserListByNick.begin(); it != UserListByNick.end(); ++it)
+ {
+ User *u = it->second;
+ if (u->server == s && !u->IsIdentified())
+ NickServService->Validate(u);
+ }
+ }
+
void OnUserNickChange(User *u, const Anope::string &oldnick) anope_override
{
const NickAlias *na = NickAlias::Find(u->nick);
@@ -357,12 +387,6 @@ class NickServCore : public Module
"will result in, at minimum, loss of the abused\n"
"nickname(s)."), Config->NickServ.c_str());
}
-
- void OnUserConnect(Reference<User> &u, bool &exempt) anope_override
- {
- if (!Config->NoNicknameOwnership && !Config->NSUnregisteredNotice.empty() && u && !NickAlias::Find(u->nick))
- u->SendMessage(NickServ, Config->NSUnregisteredNotice);
- }
};
MODULE_INIT(NickServCore)
diff --git a/modules/pseudoclients/nickserv.h b/modules/pseudoclients/nickserv.h
index 702922379..1037522ce 100644
--- a/modules/pseudoclients/nickserv.h
+++ b/modules/pseudoclients/nickserv.h
@@ -7,6 +7,7 @@ class NickServService : public Service
NickServService(Module *m) : Service(m, "NickServService", "NickServ") { }
virtual void Validate(User *u) = 0;
+ virtual void Login(User *u, NickAlias *na) = 0;
};
static ServiceReference<NickServService> NickServService("NickServService", "NickServ");