Add arguments ignoreChannelOp and ignoreDefaultAllow to ircdb.checkCapability.

This commit is contained in:
Valentin Lorentz 2013-12-27 15:04:32 +00:00
parent f1c13054fe
commit 233571e4b5

View File

@ -136,7 +136,7 @@ class CapabilitySet(set):
else: else:
return False return False
def check(self, capability): def check(self, capability, ignoreOwner=False):
"""Returns the appropriate boolean for whether a given capability is """Returns the appropriate boolean for whether a given capability is
'allowed' given its (or its anticapability's) presence in the set. 'allowed' given its (or its anticapability's) presence in the set.
""" """
@ -244,7 +244,7 @@ class IrcUser(object):
else: else:
return False return False
else: else:
return self.capabilities.check(capability, ignoreOwner) return self.capabilities.check(capability, ignoreOwner=ignoreOwner)
def setPassword(self, password, hashed=False): def setPassword(self, password, hashed=False):
"""Sets the user's password.""" """Sets the user's password."""
@ -440,11 +440,11 @@ class IrcChannel(object):
"""Sets the default capability in the channel.""" """Sets the default capability in the channel."""
self.defaultAllow = b self.defaultAllow = b
def _checkCapability(self, capability): def _checkCapability(self, capability, ignoreOwner=False):
"""Checks whether a certain capability is allowed by the channel.""" """Checks whether a certain capability is allowed by the channel."""
assert isCapability(capability), 'got %s' % capability assert isCapability(capability), 'got %s' % capability
if capability in self.capabilities: if capability in self.capabilities:
return self.capabilities.check(capability) return self.capabilities.check(capability, ignoreOwner=ignoreOwner)
else: else:
if isAntiCapability(capability): if isAntiCapability(capability):
return not self.defaultAllow return not self.defaultAllow
@ -1054,7 +1054,8 @@ def _checkCapabilityForUnknownUser(capability, users=users, channels=channels):
return _x(capability, conf.supybot.capabilities.default()) return _x(capability, conf.supybot.capabilities.default())
def checkCapability(hostmask, capability, users=users, channels=channels, def checkCapability(hostmask, capability, users=users, channels=channels,
ignoreOwner=False): ignoreOwner=False, ignoreChannelOp=False,
ignoreDefaultAllow=False):
"""Checks that the user specified by name/hostmask has the capability given. """Checks that the user specified by name/hostmask has the capability given.
""" """
if world.testing and (not isinstance(hostmask, str) or if world.testing and (not isinstance(hostmask, str) or
@ -1075,26 +1076,31 @@ def checkCapability(hostmask, capability, users=users, channels=channels,
return _checkCapabilityForUnknownUser(capability, users=users, return _checkCapabilityForUnknownUser(capability, users=users,
channels=channels) channels=channels)
if capability in u.capabilities: if capability in u.capabilities:
return u._checkCapability(capability, ignoreOwner) try:
else: return u._checkCapability(capability, ignoreOwner)
if isChannelCapability(capability): except KeyError:
(channel, capability) = fromChannelCapability(capability) pass
if isChannelCapability(capability):
(channel, capability) = fromChannelCapability(capability)
if not ignoreChannelOp:
try: try:
chanop = makeChannelCapability(channel, 'op') chanop = makeChannelCapability(channel, 'op')
if u._checkCapability(chanop): if u._checkCapability(chanop):
return _x(capability, True) return _x(capability, True)
except KeyError: except KeyError:
pass pass
c = channels.getChannel(channel) c = channels.getChannel(channel)
if capability in c.capabilities: if capability in c.capabilities:
return c._checkCapability(capability) return c._checkCapability(capability)
else: elif not ignoreDefaultAllow:
return _x(capability, c.defaultAllow) return _x(capability, c.defaultAllow)
defaultCapabilities = conf.supybot.capabilities()
if capability in defaultCapabilities:
return defaultCapabilities.check(capability)
else: else:
return _x(capability, conf.supybot.capabilities.default()) return False
defaultCapabilities = conf.supybot.capabilities()
if capability in defaultCapabilities:
return defaultCapabilities.check(capability)
else:
return _x(capability, conf.supybot.capabilities.default())
def checkCapabilities(hostmask, capabilities, requireAll=False): def checkCapabilities(hostmask, capabilities, requireAll=False):