summaryrefslogtreecommitdiff
path: root/modules/extra
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-08-01 22:37:27 -0400
committerAdam <Adam@anope.org>2011-08-01 22:37:27 -0400
commitf7adc0b35b50f06706872a161f1c7476e6e6981e (patch)
tree91fbe281f2772136a327fd4fc4c64740d1ab65ab /modules/extra
parent710c02f3bd3581b7c5b3d48e7604756975219fc8 (diff)
Rewrote the access systems and added a flags access system
Diffstat (limited to 'modules/extra')
-rw-r--r--modules/extra/cs_appendtopic.cpp4
-rw-r--r--modules/extra/cs_enforce.cpp7
-rw-r--r--modules/extra/cs_tban.cpp2
-rw-r--r--modules/extra/m_helpchan.cpp2
-rw-r--r--modules/extra/m_statusupdate.cpp52
5 files changed, 42 insertions, 25 deletions
diff --git a/modules/extra/cs_appendtopic.cpp b/modules/extra/cs_appendtopic.cpp
index 5b39b8c8c..c9af50613 100644
--- a/modules/extra/cs_appendtopic.cpp
+++ b/modules/extra/cs_appendtopic.cpp
@@ -58,7 +58,7 @@ class CommandCSAppendTopic : public Command
source.Reply(CHAN_X_NOT_IN_USE, params[0].c_str());
else if (!c->ci)
source.Reply(CHAN_X_NOT_REGISTERED, c->name.c_str());
- else if (!check_access(u, c->ci, CA_TOPIC))
+ else if (!c->ci->HasPriv(u, CA_TOPIC))
source.Reply(ACCESS_DENIED);
else
{
@@ -77,7 +77,7 @@ class CommandCSAppendTopic : public Command
if (has_topiclock)
c->ci->SetFlag(CI_TOPICLOCK);
- bool override = !check_access(u, c->ci, CA_TOPIC);
+ bool override = c->ci->HasPriv(u, CA_TOPIC);
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, c->ci) << "changed topic to " << topic;
}
return;
diff --git a/modules/extra/cs_enforce.cpp b/modules/extra/cs_enforce.cpp
index 4ba813ffd..5f59a4b31 100644
--- a/modules/extra/cs_enforce.cpp
+++ b/modules/extra/cs_enforce.cpp
@@ -69,7 +69,7 @@ class CommandCSEnforce : public Command
void DoRestricted(Channel *c)
{
- ChannelInfo *ci;
+ /*ChannelInfo *ci;
int16 old_nojoin_level;
Anope::string mask;
@@ -94,6 +94,9 @@ class CommandCSEnforce : public Command
}
ci->levels[CA_NOJOIN] = old_nojoin_level;
+ XXX
+ */
+
}
void DoCModeR(Channel *c)
@@ -136,7 +139,7 @@ class CommandCSEnforce : public Command
source.Reply(CHAN_X_NOT_IN_USE, params[0].c_str());
else if (!c->ci)
source.Reply(CHAN_X_NOT_REGISTERED, c->name.c_str());
- else if (!check_access(u, c->ci, CA_AKICK))
+ else if (!c->ci->HasPriv(u, CA_AKICK))
source.Reply(ACCESS_DENIED);
else
{
diff --git a/modules/extra/cs_tban.cpp b/modules/extra/cs_tban.cpp
index a0bb6a626..404279bef 100644
--- a/modules/extra/cs_tban.cpp
+++ b/modules/extra/cs_tban.cpp
@@ -40,7 +40,7 @@ static bool CanBanUser(CommandSource &source, Channel *c, User *u2)
User *u = source.u;
ChannelInfo *ci = c->ci;
bool ok = false;
- if (!check_access(u, ci, CA_BAN))
+ if (!ci->HasPriv(u, CA_BAN))
source.Reply(ACCESS_DENIED);
else if (matches_list(c, u2, CMODE_EXCEPT))
source.Reply(CHAN_EXCEPTED, u2->nick.c_str(), ci->name.c_str());
diff --git a/modules/extra/m_helpchan.cpp b/modules/extra/m_helpchan.cpp
index 71e1d3355..f5c63941a 100644
--- a/modules/extra/m_helpchan.cpp
+++ b/modules/extra/m_helpchan.cpp
@@ -28,7 +28,7 @@ class HelpChannel : public Module
{
User *u = finduser(param);
- if (u && check_access(u, c->ci, CA_OPDEOPME))
+ if (u && c->ci->HasPriv(u, CA_OPDEOPME))
u->SetMode(findbot(Config->OperServ), UMODE_HELPOP);
}
diff --git a/modules/extra/m_statusupdate.cpp b/modules/extra/m_statusupdate.cpp
index f04ab4fa5..2b23492ec 100644
--- a/modules/extra/m_statusupdate.cpp
+++ b/modules/extra/m_statusupdate.cpp
@@ -7,6 +7,19 @@
#include "module.h"
+static struct ModeInfo
+{
+ ChannelAccess priv;
+ ChannelModeName name;
+} modeInfo[] = {
+ { CA_AUTOOWNER, CMODE_OWNER },
+ { CA_AUTOPROTECT, CMODE_PROTECT },
+ { CA_AUTOOP, CMODE_OP },
+ { CA_AUTOHALFOP, CMODE_HALFOP },
+ { CA_AUTOVOICE, CMODE_VOICE },
+ { CA_SIZE, CMODE_END }
+};
+
class StatusUpdate : public Module
{
public:
@@ -14,41 +27,42 @@ class StatusUpdate : public Module
{
this->SetAuthor("Anope");
- Implementation i[] = { I_OnAccessAdd, I_OnAccessChange, I_OnAccessDel, I_OnAccessClear };
+ Implementation i[] = { I_OnAccessAdd, I_OnAccessDel };
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
}
void OnAccessAdd(ChannelInfo *ci, User *u, ChanAccess *access)
{
- this->OnAccessChange(ci, u, access);
- }
-
- void OnAccessChange(ChannelInfo *ci, User *, ChanAccess *access)
- {
if (ci->c)
for (CUserList::iterator it = ci->c->users.begin(), it_end = ci->c->users.end(); it != it_end; ++it)
{
User *user = (*it)->user;
- if (user == ci->bi)
- continue;
-
- ChanAccess *highest = ci->GetAccess(user);
-
- if (!access || (highest == access))
- chan_set_correct_modes(user, ci->c, 1);
+ if (access->Matches(user, user->Account()))
+ {
+ for (int i = 0; modeInfo[i].priv != CA_SIZE; ++i)
+ if (access->HasPriv(modeInfo[i].priv))
+ ci->c->SetMode(NULL, modeInfo[i].name, user->nick);
+ else
+ ci->c->RemoveMode(NULL, modeInfo[i].name, user->nick);
+ }
}
}
void OnAccessDel(ChannelInfo *ci, User *u, ChanAccess *access)
{
- access->level = 0;
- this->OnAccessChange(ci, u, access);
- }
+ if (ci->c)
+ for (CUserList::iterator it = ci->c->users.begin(), it_end = ci->c->users.end(); it != it_end; ++it)
+ {
+ User *user = (*it)->user;
- void OnAccessClear(ChannelInfo *ci, User *u)
- {
- this->OnAccessChange(ci, u, NULL);
+ if (access->Matches(user, user->Account()))
+ {
+ for (int i = 0; modeInfo[i].priv != CA_SIZE; ++i)
+ if (access->HasPriv(modeInfo[i].priv))
+ ci->c->RemoveMode(NULL, modeInfo[i].name, user->nick);
+ }
+ }
}
};