X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services_account.cpp;h=61026c08f5d0cdbfb4f6ba91eebb4d7ee903f3d5;hb=1bfa48143c04504181d1b194af151fae2dac1eb1;hp=73723f4e1bc886dc745a236089cf968da71cfe80;hpb=9336468f5bfa60318cb57db5126047147b7a21cb;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp index 73723f4e1..61026c08f 100644 --- a/src/modules/m_services_account.cpp +++ b/src/modules/m_services_account.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * InspIRCd: (C) 2002-2010 InspIRCd Development Team * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see @@ -20,14 +20,13 @@ */ class Channel_r : public ModeHandler { - public: - Channel_r(Module* Creator) : ModeHandler(Creator, 'r', PARAM_NONE, MODETYPE_CHANNEL) { } + Channel_r(Module* Creator) : ModeHandler(Creator, "c_registered", 'r', PARAM_NONE, MODETYPE_CHANNEL) { } ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding) { // only a u-lined server may add or remove the +r mode. - if (IS_REMOTE(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server)) + if (!IS_LOCAL(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server)) { // Only change the mode if it's not redundant if ((adding && !channel->IsModeSet('r')) || (!adding && channel->IsModeSet('r'))) @@ -52,11 +51,11 @@ class User_r : public ModeHandler { public: - User_r(Module* Creator) : ModeHandler(Creator, 'r', PARAM_NONE, MODETYPE_USER) { } + User_r(Module* Creator) : ModeHandler(Creator, "u_registered", 'r', PARAM_NONE, MODETYPE_USER) { } ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding) { - if (IS_REMOTE(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server)) + if (!IS_LOCAL(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server)) { if ((adding && !dest->IsModeSet('r')) || (!adding && dest->IsModeSet('r'))) { @@ -78,7 +77,7 @@ class User_r : public ModeHandler class AChannel_R : public SimpleChannelModeHandler { public: - AChannel_R(Module* Creator) : SimpleChannelModeHandler(Creator, 'R') { } + AChannel_R(Module* Creator) : SimpleChannelModeHandler(Creator, "reginvite", 'R') { } }; /** User mode +R - unidentified users cannot message @@ -86,7 +85,7 @@ class AChannel_R : public SimpleChannelModeHandler class AUser_R : public SimpleUserModeHandler { public: - AUser_R(Module* Creator) : SimpleUserModeHandler(Creator, 'R') { } + AUser_R(Module* Creator) : SimpleUserModeHandler(Creator, "regdeaf", 'R') { } }; /** Channel mode +M - unidentified users cannot message channel @@ -94,7 +93,7 @@ class AUser_R : public SimpleUserModeHandler class AChannel_M : public SimpleChannelModeHandler { public: - AChannel_M(Module* Creator) : SimpleChannelModeHandler(Creator, 'M') { } + AChannel_M(Module* Creator) : SimpleChannelModeHandler(Creator, "regmoderated", 'M') { } }; class ModuleServicesAccount : public Module @@ -104,22 +103,25 @@ class ModuleServicesAccount : public Module AUser_R m3; Channel_r m4; User_r m5; - StringExtItem accountname; + AccountExtItem accountname; public: ModuleServicesAccount() : m1(this), m2(this), m3(this), m4(this), m5(this), accountname("accountname", this) { + } - if (!ServerInstance->Modes->AddMode(&m1) || !ServerInstance->Modes->AddMode(&m2) || - !ServerInstance->Modes->AddMode(&m3) || !ServerInstance->Modes->AddMode(&m4) || - !ServerInstance->Modes->AddMode(&m5)) - throw ModuleException("Some other module has claimed our modes!"); - - Extensible::Register(&accountname); + void init() + { + ServerInstance->Modules->AddService(m1); + ServerInstance->Modules->AddService(m2); + ServerInstance->Modules->AddService(m3); + ServerInstance->Modules->AddService(m4); + ServerInstance->Modules->AddService(m5); + ServerInstance->Modules->AddService(accountname); Implementation eventlist[] = { I_OnWhois, I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserPreJoin, I_OnCheckBan, - I_OnSyncUser, I_OnUserQuit, I_OnCleanup, I_OnDecodeMetaData, I_On005Numeric, I_OnUserPostNick }; + I_OnDecodeMetaData, I_On005Numeric, I_OnUserPostNick, I_OnSetConnectClass }; - ServerInstance->Modules->Attach(eventlist, this, 10); + ServerInstance->Modules->Attach(eventlist, this, 9); } void On005Numeric(std::string &t) @@ -173,8 +175,9 @@ class ModuleServicesAccount : public Module if (target_type == TYPE_CHANNEL) { Channel* c = (Channel*)dest; + ModResult res = ServerInstance->OnCheckExemption(user,c,"regmoderated"); - if (c->IsModeSet('M') && !is_registered) + if (c->IsModeSet('M') && !is_registered && res != MOD_RES_ALLOW) { // user messaging a +M channel and is not registered user->WriteNumeric(477, ""+std::string(user->nick)+" "+std::string(c->name)+" :You need to be identified to a registered account to message this channel"); @@ -262,22 +265,21 @@ class ModuleServicesAccount : public Module dest->WriteNumeric(900, "%s %s %s :You are now logged in as %s", dest->nick.c_str(), dest->GetFullHost().c_str(), account->c_str(), account->c_str()); - AccountData ac; - ac.user = dest; - ac.account = *account; - Event n((char*)&ac, this, "account_login"); - n.Send(); + AccountEvent(this, dest, *account).Send(); } } } - ~ModuleServicesAccount() + ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) { + if (myclass->config->getBool("requireaccount") && !accountname.get(user)) + return MOD_RES_DENY; + return MOD_RES_PASSTHRU; } Version GetVersion() { - return Version("Povides support for ircu-style services accounts, including chmode +R, etc.",VF_COMMON|VF_VENDOR,API_VERSION); + return Version("Povides support for ircu-style services accounts, including chmode +R, etc.",VF_OPTCOMMON|VF_VENDOR); } };