Fix broken capability checking and extend with some hierarchy checking
This commit is contained in:
parent
24a296c2d8
commit
8290296373
|
@ -55,14 +55,22 @@ 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
|
||||||
|
if capability == "admin":
|
||||||
|
if capab(user.name, "owner"):
|
||||||
|
return True
|
||||||
|
# End #
|
||||||
|
if capability in capabilities:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
except:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def hostmaskPatternEqual(pattern, hostmask):
|
def hostmaskPatternEqual(pattern, hostmask):
|
||||||
if pattern.count('!') not in (1, 2) or pattern.count('@') != 1:
|
if pattern.count('!') not in (1, 2) or pattern.count('@') != 1:
|
||||||
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
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
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
except:
|
|
||||||
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):
|
||||||
|
|
Loading…
Reference in New Issue