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

View File

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