Fix broken capability checking and extend with some hierarchy checking

This commit is contained in:
Terence Simpson 2008-08-07 14:31:26 +01:00
parent 24a296c2d8
commit 8290296373
2 changed files with 36 additions and 16 deletions

View File

@ -55,13 +55,21 @@ tz = 'UTC'
def now():
return cPickle.dumps(datetime.datetime.now(pytz.timezone(tz)))
def capab(user, capability):
try:
if capability in list(user.capabilities):
capability = capability.lower()
capabilities = list(user.capabilities)
# Capability hierarchy #
if capability == "bantracker":
if capab(user.name, "admin"):
return True
else:
return False
except:
if capability == "admin":
if capab(user.name, "owner"):
return True
# End #
if capability in capabilities:
return True
else:
return False
def hostmaskPatternEqual(pattern, hostmask):
@ -531,7 +539,7 @@ class Bantracker(callbacks.Plugin):
hostmask = self.nick_to_host(irc, target)
data = self.sort_bans(channel)
if 'owner' in list(user.capabilities) or 'admin' in list(user.capabilities):
if capab(user, 'admin'):
if len(queue.msgcache) > 0:
irc.reply("Warning: still syncing (%i)" % len(queue.msgcache))
@ -560,7 +568,7 @@ class Bantracker(callbacks.Plugin):
for i in ret:
irc.reply("Match: %s by %s in %s on %s (ID: %s)" % (i[0] + (i[1],)))
if 'botmsg' in list(user.capabilities):
if capab(user, 'botmsg'):
if target.split('!', 1)[0] != '*':
irc.reply("%s/bans.cgi?log=%s&mark=%s" % (self.registryValue('bansite'), i[1], target.split('!')[0]), private=True)
else:
@ -697,7 +705,7 @@ class Bantracker(callbacks.Plugin):
user = self.check_auth(irc, msg, args)
if not user:
return
if 'botmsg' in list(user.capabilities):
if capab(user, 'botmsg'):
user.removeCapability('botmsg')
irc.reply("Disabled")
else:

View File

@ -64,17 +64,31 @@ def queue(irc, to, msg):
irc.queueMsg(ircmsgs.privmsg(to, msg))
def capab(prefix, capability):
capability = capability.lower()
if prefix.find('!') > 0:
user = prefix[:prefix.find('!')]
else:
user = prefix
try:
if 'editfactoids' in list(ircdb.users.getUser(prefix).capabilities):
return True
else:
return False
user = ircdb.users.getUser(prefix)
capabilities = list(user.capabilities)
except:
return False
# Capability hierarchy #
if capability == "editfactoids":
if capab(user.name, "addeditors"):
return True
if capability == "addeditors":
if capab(user.name, "admin"):
return True
if capability == "admin":
if capab(user.name, "owner"):
return True
# End #
if capability in capabilities:
return True
else:
return False
class Encyclopedia(callbacks.Plugin):
"""!factoid: show factoid"""
@ -128,8 +142,7 @@ class Encyclopedia(callbacks.Plugin):
Lists all the users who are in the list of editors.
"""
irc.reply(', '.join([ircdb.users.getUser(u).name for u in ircdb.users.users \
if 'editfactoids' in ircdb.users.getUser(u).capabilities]), private=True)
irc.reply(', '.join([u.name for u in ircdb.users.users.values() if capab(u.name, "editfactoids")]), private=True)
editors = wrap(editors)
def moderators(self, irc, msg, args):
@ -137,8 +150,7 @@ class Encyclopedia(callbacks.Plugin):
Lists all the users who can add users to the list of editors.
"""
irc.reply(', '.join([ircdb.users.getUser(u).name for u in ircdb.users.users \
if 'addeditors' in ircdb.users.getUser(u).capabilities]), private=True)
irc.reply(', '.join([u.name for u in ircdb.users.users.values() if capab(u.name, 'addeditors')]), private=True)
moderators = wrap(moderators)
def get_target(self, nick, text, orig_target):