/**
* Tracks SASL authentication state like charybdis does. --nenolod
*/
-class SaslAuthenticator : public classbase
+class SaslAuthenticator
{
private:
InspIRCd *ServerInstance;
bool state_announced;
public:
- SaslAuthenticator(User *user_, std::string method, InspIRCd *instance, Module *ctor)
- : ServerInstance(instance), user(user_), state(SASL_INIT), state_announced(false)
+ SaslAuthenticator(User *user_, std::string method, Module *ctor)
+ : user(user_), state(SASL_INIT), state_announced(false)
{
parameterlist params;
params.push_back("*");
public:
SimpleExtItem<SaslAuthenticator>& authExt;
GenericCap& cap;
- CommandAuthenticate (InspIRCd* Instance, Module* Creator, SimpleExtItem<SaslAuthenticator>& ext, GenericCap& Cap)
- : Command(Instance, Creator, "AUTHENTICATE", 0, 1, true), authExt(ext), cap(Cap)
+ CommandAuthenticate(Module* Creator, SimpleExtItem<SaslAuthenticator>& ext, GenericCap& Cap)
+ : Command(Creator, "AUTHENTICATE", 1), authExt(ext), cap(Cap)
{
+ works_before_reg = true;
}
CmdResult Handle (const std::vector<std::string>& parameters, User *user)
SaslAuthenticator *sasl = authExt.get(user);
if (!sasl)
- authExt.set(user, new SaslAuthenticator(user, parameters[0], ServerInstance, creator));
+ authExt.set(user, new SaslAuthenticator(user, parameters[0], creator));
else if (sasl->SendClientMessage(parameters) == false) // IAL abort extension --nenolod
{
sasl->AnnounceState();
{
public:
SimpleExtItem<SaslAuthenticator>& authExt;
- CommandSASL(InspIRCd* Instance, Module* Creator, SimpleExtItem<SaslAuthenticator>& ext)
- : Command(Instance, Creator, "SASL", 0, 2), authExt(ext)
+ CommandSASL(Module* Creator, SimpleExtItem<SaslAuthenticator>& ext) : Command(Creator, "SASL", 2), authExt(ext)
{
this->disabled = true; // should not be called by users
}
CommandAuthenticate auth;
CommandSASL sasl;
public:
- ModuleSASL(InspIRCd* Me)
- : Module(Me), authExt("sasl_auth", this), cap(this, "sasl"), auth(Me, this, authExt, cap), sasl(Me, this, authExt)
+ ModuleSASL()
+ : authExt("sasl_auth", this), cap(this, "sasl"), auth(this, authExt, cap), sasl(this, authExt)
{
- Implementation eventlist[] = { I_OnEvent, I_OnUserRegister, I_OnPostConnect, I_OnUserDisconnect, I_OnCleanup };
- ServerInstance->Modules->Attach(eventlist, this, 5);
+ Implementation eventlist[] = { I_OnEvent, I_OnUserRegister, I_OnPostConnect, I_OnUserDisconnect };
+ ServerInstance->Modules->Attach(eventlist, this, 4);
ServerInstance->AddCommand(&auth);
ServerInstance->AddCommand(&sasl);
- Extensible::Register(&authExt);
+ ServerInstance->Extensions.Register(&authExt);
if (!ServerInstance->Modules->Find("m_services_account.so") || !ServerInstance->Modules->Find("m_cap.so"))
ServerInstance->Logs->Log("m_sasl", 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!");
}
Version GetVersion()
{
- return Version("$Id$",VF_VENDOR,API_VERSION);
+ return Version("Provides support for IRC Authentication Layer (aka: atheme SASL) via AUTHENTICATE.",VF_VENDOR);
}
- void OnEvent(Event *ev)
+ void OnEvent(Event &ev)
{
cap.HandleEvent(ev);
}