mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Add <hidechans:affectsopers>, allows networks to hide channels of a +I user even from opers, for added privacy.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10644 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
5d3ffb27e0
commit
6cdc212ce7
@ -710,6 +710,11 @@
|
||||
# HIDECHANS module: Allows opers to hide their channels list from non-
|
||||
# opers by setting user mode +I on themselves.
|
||||
# <module name="m_hidechans.so">
|
||||
#
|
||||
# HIDECHANS can optionally prevent opers from seeing channels on a +I
|
||||
# user, for more privacy if set to true.
|
||||
# This setting is not recommended for most mainstream networks.
|
||||
#<hidechans affectsopers="false">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# HIDEOPER module: Allows opers to hide their oper status from non-
|
||||
|
@ -47,21 +47,20 @@ class HideChans : public ModeHandler
|
||||
|
||||
class ModuleHideChans : public Module
|
||||
{
|
||||
|
||||
bool AffectsOpers;
|
||||
HideChans* hm;
|
||||
public:
|
||||
ModuleHideChans(InspIRCd* Me)
|
||||
: Module(Me)
|
||||
ModuleHideChans(InspIRCd* Me) : Module(Me)
|
||||
{
|
||||
|
||||
hm = new HideChans(ServerInstance);
|
||||
if (!ServerInstance->Modes->AddMode(hm))
|
||||
throw ModuleException("Could not add new modes!");
|
||||
Implementation eventlist[] = { I_OnWhoisLine };
|
||||
ServerInstance->Modules->Attach(eventlist, this, 1);
|
||||
Implementation eventlist[] = { I_OnWhoisLine, I_OnRehash };
|
||||
ServerInstance->Modules->Attach(eventlist, this, 2);
|
||||
OnRehash(NULL, "");
|
||||
}
|
||||
|
||||
|
||||
virtual ~ModuleHideChans()
|
||||
{
|
||||
ServerInstance->Modes->DelMode(hm);
|
||||
@ -73,12 +72,36 @@ class ModuleHideChans : public Module
|
||||
return Version("$Id$", VF_COMMON | VF_VENDOR, API_VERSION);
|
||||
}
|
||||
|
||||
virtual void OnRehash(User* user, const std::string ¶meter)
|
||||
{
|
||||
ConfigReader conf(ServerInstance);
|
||||
AffectsOpers = conf.ReadFlag("hidechans", "affectsopers", 0);
|
||||
}
|
||||
|
||||
int OnWhoisLine(User* user, User* dest, int &numeric, std::string &text)
|
||||
{
|
||||
/* Dont display channels if they have +I set and the
|
||||
* person doing the WHOIS is not an oper
|
||||
*/
|
||||
return ((user != dest) && (!IS_OPER(user)) && (numeric == 319) && dest->IsModeSet('I'));
|
||||
/* always show to self */
|
||||
if (user == dest)
|
||||
return 0;
|
||||
|
||||
/* don't touch anything except 319 */
|
||||
if (numeric != 319)
|
||||
return 0;
|
||||
|
||||
/* don't touch if -I */
|
||||
if (!dest->IsModeSet('I'))
|
||||
return 0;
|
||||
|
||||
/* if it affects opers, we don't care if they are opered */
|
||||
if (AffectsOpers)
|
||||
return 1;
|
||||
|
||||
/* doesn't affect opers, sender is opered */
|
||||
if (IS_OPER(user))
|
||||
return 0;
|
||||
|
||||
/* user must be opered, boned. */
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user