- if (ac->user->GetExt("sasl"))
- {
- ac->user->WriteServ("903 %s :SASL authentication successful", ac->user->nick);
- ac->user->Shrink("sasl");
- }
+ RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
+ {
+ return ROUTE_BROADCAST;
+ }
+};
+
+class ModuleSASL : public Module
+{
+ SimpleExtItem<SaslAuthenticator> authExt;
+ GenericCap cap;
+ CommandAuthenticate auth;
+ CommandSASL sasl;
+ Events::ModuleEventProvider sasleventprov;
+
+ public:
+ ModuleSASL()
+ : authExt("sasl_auth", ExtensionItem::EXT_USER, this)
+ , cap(this, "sasl")
+ , auth(this, authExt, cap)
+ , sasl(this, authExt)
+ , sasleventprov(this, "event/sasl")
+ {
+ saslevprov = &sasleventprov;
+ }
+
+ void init() CXX11_OVERRIDE
+ {
+ if (!ServerInstance->Modules->Find("m_services_account.so") || !ServerInstance->Modules->Find("m_cap.so"))
+ ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "WARNING: m_services_account.so and m_cap.so are not loaded! m_sasl.so will NOT function correctly until these two modules are loaded!");
+ }
+
+ void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
+ {
+ sasl_target = ServerInstance->Config->ConfValue("sasl")->getString("target", "*");
+ }
+
+ ModResult OnUserRegister(LocalUser *user) CXX11_OVERRIDE
+ {
+ SaslAuthenticator *sasl_ = authExt.get(user);
+ if (sasl_)
+ {
+ sasl_->Abort();
+ authExt.unset(user);