This commit is contained in:
Jeremy Fincher 2004-10-22 06:21:34 +00:00
parent 098fbbfeae
commit a238ed6298
9 changed files with 55 additions and 61 deletions

View File

@ -303,7 +303,7 @@ class Admin(privmsgs.CapabilityCheckingPrivmsg):
if ircdb.isAntiCapability(capability) or \
ircdb.checkCapability(msg.prefix, capability):
user.addCapability(capability)
ircdb.users.setUser(user.id, user)
ircdb.users.setUser(user)
irc.replySuccess()
else:
irc.error('You can\'t add capabilities you don\'t have.')
@ -319,7 +319,7 @@ class Admin(privmsgs.CapabilityCheckingPrivmsg):
ircdb.isAntiCapability(capability):
try:
user.removeCapability(capability)
ircdb.users.setUser(user.id, user)
ircdb.users.setUser(user)
irc.replySuccess()
except KeyError:
irc.error('That user doesn\'t have that capability.')

View File

@ -542,7 +542,7 @@ class Channel(callbacks.Privmsg):
for c in capabilities.split():
c = ircdb.makeChannelCapability(channel, c)
user.addCapability(c)
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.replySuccess()
addcapability = wrap(addcapability, [('checkChannelCapability', 'op'),
'hostmask', 'capability'])
@ -567,7 +567,7 @@ class Channel(callbacks.Privmsg):
user.removeCapability(cap)
except KeyError:
fail.append(c)
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
if fail:
irc.error('That user didn\'t have the %s %s.' %
(utils.commaAndify(fail),

View File

@ -129,12 +129,12 @@ class User(callbacks.Privmsg):
return
except KeyError:
pass
(id, user) = ircdb.users.newUser()
user = ircdb.users.newUser()
user.name = name
user.setPassword(password, hashed=hashed)
if addHostmask:
user.addHostmask(msg.prefix)
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.replySuccess()
def unregister(self, irc, msg, args):
@ -183,7 +183,7 @@ class User(callbacks.Privmsg):
pass
if user.checkHostmask(msg.prefix) or user.checkPassword(password):
user.name = newname
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.replySuccess()
def addhostmask(self, irc, msg, args):
@ -237,7 +237,7 @@ class User(callbacks.Privmsg):
except ValueError, e:
irc.error(str(e), Raise=True)
try:
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
except ValueError, e:
irc.error(str(e), Raise=True)
irc.replySuccess()
@ -275,7 +275,7 @@ class User(callbacks.Privmsg):
except ValueError:
irc.error('There was no such hostmask.')
return
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.replySuccess(s)
def setpassword(self, irc, msg, args):
@ -306,7 +306,7 @@ class User(callbacks.Privmsg):
if user.checkPassword(oldpassword) or \
(u.checkCapability('owner') and not u == user):
user.setPassword(newpassword, hashed=hashed)
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.replySuccess()
else:
irc.error(conf.supybot.replies.incorrectAuthentication())
@ -390,7 +390,7 @@ class User(callbacks.Privmsg):
if user.checkPassword(password):
try:
user.addAuth(msg.prefix)
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.replySuccess()
except ValueError:
irc.error('Your secure flag is true and your hostmask '
@ -413,7 +413,7 @@ class User(callbacks.Privmsg):
irc.errorNoUser()
return
user.clearAuth()
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.replySuccess('If you remain recognized after giving this command, '
'you\'re being recognized by hostmask, rather than '
'by password. You must remove whatever hostmask is '
@ -459,7 +459,7 @@ class User(callbacks.Privmsg):
if user.checkPassword(password) and \
user.checkHostmask(msg.prefix, useAuth=False):
user.secure = value
ircdb.users.setUser(id, user)
ircdb.users.setUser(user)
irc.reply('Secure flag set to %s' % value)
else:
irc.error(conf.supybot.replies.incorrectAuthentication())

View File

@ -458,18 +458,17 @@ class Creator(object):
raise ValueError, 'Invalid command on line %s: %s' % (lineno, command)
class IrcUserCreator(Creator):
id = None
def __init__(self, users):
self.u = IrcUser()
self.users = users
def user(self, rest, lineno):
if self.id is not None:
if self.u.id is not None:
raise ValueError, 'Unexpected user command on line %s.' % lineno
IrcUserCreator.id = int(rest)
self.u.id = int(rest)
def _checkId(self):
if self.id is None:
if self.u.id is None:
raise ValueError, 'Unexpected user description without user.'
def name(self, rest, lineno):
@ -503,7 +502,7 @@ class IrcUserCreator(Creator):
def finish(self):
if self.u.name:
try:
self.users.setUser(self.id, self.u)
self.users.setUser(self.u)
except DuplicateHostmask:
log.error('Hostmasks for %s collided with another user\'s. '
'Resetting hostmasks for %s.', self.u.name)
@ -511,7 +510,7 @@ class IrcUserCreator(Creator):
# But we've got to do *something*, so we'll show some deference
# to our lower-numbered users.
self.u.hostmasks[:] = []
self.users.setUser(self.id, self.u)
self.users.setUser(self.u)
IrcUserCreator.id = None
class IrcChannelCreator(Creator):
@ -712,19 +711,17 @@ class UsersDictionary(utils.IterableMap):
del self._hostmaskCache[hostmask]
del self._hostmaskCache[id]
# XXX This shouldn't require an id, since user has an id attribute.
def setUser(self, id, user):
def setUser(self, user):
"""Sets a user (given its id) to the IrcUser given it."""
assert isinstance(id, int), 'setUser takes an integer userId.'
self.nextId = max(self.nextId, id)
self.nextId = max(self.nextId, user.id)
try:
if self.getUserId(user.name) != id:
if self.getUserId(user.name) != user.id:
raise DuplicateHostmask, hostmask
except KeyError:
pass
for hostmask in user.hostmasks:
for (i, u) in self.iteritems():
if i == id:
if i == user.id:
continue
elif u.checkHostmask(hostmask):
# We used to remove the hostmask here, but it's not
@ -736,8 +733,8 @@ class UsersDictionary(utils.IterableMap):
for otherHostmask in u.hostmasks:
if ircutils.hostmaskPatternEqual(hostmask, otherHostmask):
raise DuplicateHostmask, hostmask
self.invalidateCache(id)
self.users[id] = user
self.invalidateCache(user.id)
self.users[user.id] = user
self.flush()
def delUser(self, id):
@ -752,8 +749,6 @@ class UsersDictionary(utils.IterableMap):
del self._hostmaskCache[id]
self.flush()
# XXX This shouldn't return a tuple, just the user, since user has an
# id attribute now.
def newUser(self):
"""Allocates a new user in the database and returns it and its id."""
hashed = conf.supybot.databases.users.hash()
@ -763,7 +758,7 @@ class UsersDictionary(utils.IterableMap):
self.users[id] = user
self.flush()
user.id = id
return (id, user)
return user
class ChannelsDictionary(utils.IterableMap):

View File

@ -917,7 +917,7 @@ class Irc(IrcCommandDispatcher):
log.info('Following identification for %s: %s -> %s',
u.name, authmask, newhostmask)
u.auth[i] = (u.auth[i][0], newhostmask)
ircdb.users.setUser(id, u)
ircdb.users.setUser(u)
def _reallyDie(self):
"""Makes the Irc object die. Dead."""

View File

@ -63,9 +63,9 @@ class AdminTestCase(PluginTestCase):
def testAddcapability(self):
self.assertError('addcapability sdlkfj foo')
(id, u) = ircdb.users.newUser()
u = ircdb.users.newUser()
u.name = 'foo'
ircdb.users.setUser(id, u)
ircdb.users.setUser(u)
self.assertError('removecapability foo bar')
self.assertNotRegexp('removecapability foo bar', 'find')

View File

@ -44,7 +44,7 @@ class ChannelTestCase(ChannelPluginTestCase, PluginDocumentation):
## prefix=self.prefix))
## u = ircdb.users.getUser(0)
## u.addCapability('%s.op' % self.channel)
## ircdb.users.setUser(0, u)
## ircdb.users.setUser(u)
## self.assertNotError(' ')
## self.assertResponse('user capabilities foo', '[]')
## self.assertNotError('channel addcapability foo op')

View File

@ -61,10 +61,9 @@ class ChannelStatsTestCase(ChannelPluginTestCase):
self.assertNotError('channelstats stats %s' % self.irc.nick)
self.assertNotError('channelstats stats %s' % self.irc.nick)
self.assertNotError('channelstats stats %s' % self.irc.nick.upper())
id = ircdb.users.getUserId(self.prefix)
u = ircdb.users.getUser(id)
u = ircdb.users.getUser(self.prefix)
u.addCapability(ircdb.makeChannelCapability(self.channel, 'op'))
ircdb.users.setUser(id, u)
ircdb.users.setUser(u)
try:
conf.supybot.plugins.ChannelStats.selfStats.setValue(False)
m1 = self.getMsg('channelstats stats %s' % self.irc.nick)

View File

@ -357,19 +357,19 @@ class UsersDictionaryTestCase(IrcdbTestCase):
def testIterAndNumUsers(self):
self.assertEqual(self.users.numUsers(), 0)
(id, u) = self.users.newUser()
u = self.users.newUser()
hostmask = 'foo!xyzzy@baz.domain.com'
banmask = ircutils.banmask(hostmask)
u.addHostmask(banmask)
u.name = 'foo'
self.users.setUser(id, u)
self.users.setUser(u)
self.assertEqual(self.users.numUsers(), 1)
(id, u) = self.users.newUser()
u = self.users.newUser()
hostmask = 'biff!fladksfj@blakjdsf'
banmask = ircutils.banmask(hostmask)
u.addHostmask(banmask)
u.name = 'biff'
self.users.setUser(id, u)
self.users.setUser(u)
self.assertEqual(self.users.numUsers(), 2)
self.users.delUser(2)
self.assertEqual(self.users.numUsers(), 1)
@ -380,22 +380,22 @@ class UsersDictionaryTestCase(IrcdbTestCase):
self.assertRaises(KeyError, self.users.getUser, 'foo')
self.assertRaises(KeyError,
self.users.getUser, 'foo!xyzzy@baz.domain.com')
(id, u) = self.users.newUser()
u = self.users.newUser()
hostmask = 'foo!xyzzy@baz.domain.com'
banmask = ircutils.banmask(hostmask)
u.addHostmask(banmask)
u.addHostmask(hostmask)
u.name = 'foo'
self.users.setUser(id, u)
self.users.setUser(u)
self.assertEqual(self.users.getUser('foo'), u)
self.assertEqual(self.users.getUser('FOO'), u)
self.assertEqual(self.users.getUser(hostmask), u)
self.assertEqual(self.users.getUser(banmask), u)
# The UsersDictionary shouldn't allow users to be added whose hostmasks
# match another user's already in the database.
(id, u2) = self.users.newUser()
u2 = self.users.newUser()
u2.addHostmask('*!xyzzy@baz.domain.c?m')
self.assertRaises(ValueError, self.users.setUser, id, u2)
self.assertRaises(ValueError, self.users.setUser, u2)
class CheckCapabilityTestCase(IrcdbTestCase):
@ -430,47 +430,47 @@ class CheckCapabilityTestCase(IrcdbTestCase):
self.channels = ircdb.ChannelsDictionary()
#self.channels.open(self.filename)
(id, owner) = self.users.newUser()
owner = self.users.newUser()
owner.name = 'owner'
owner.addCapability('owner')
owner.addHostmask(self.owner)
self.users.setUser(id, owner)
self.users.setUser(owner)
(id, nothing) = self.users.newUser()
nothing = self.users.newUser()
nothing.name = 'nothing'
nothing.addHostmask(self.nothing)
self.users.setUser(id, nothing)
self.users.setUser(nothing)
(id, justfoo) = self.users.newUser()
justfoo = self.users.newUser()
justfoo.name = 'justfoo'
justfoo.addCapability(self.cap)
justfoo.addHostmask(self.justfoo)
self.users.setUser(id, justfoo)
self.users.setUser(justfoo)
(id, antifoo) = self.users.newUser()
antifoo = self.users.newUser()
antifoo.name = 'antifoo'
antifoo.addCapability(self.anticap)
antifoo.addHostmask(self.antifoo)
self.users.setUser(id, antifoo)
self.users.setUser(antifoo)
(id, justchanfoo) = self.users.newUser()
justchanfoo = self.users.newUser()
justchanfoo.name = 'justchanfoo'
justchanfoo.addCapability(self.chancap)
justchanfoo.addHostmask(self.justchanfoo)
self.users.setUser(id, justchanfoo)
self.users.setUser(justchanfoo)
(id, antichanfoo) = self.users.newUser()
antichanfoo = self.users.newUser()
antichanfoo.name = 'antichanfoo'
antichanfoo.addCapability(self.antichancap)
antichanfoo.addHostmask(self.antichanfoo)
self.users.setUser(id, antichanfoo)
self.users.setUser(antichanfoo)
(id, securefoo) = self.users.newUser()
securefoo = self.users.newUser()
securefoo.name = 'securefoo'
securefoo.addCapability(self.cap)
securefoo.secure = True
securefoo.addHostmask(self.securefoo)
self.users.setUser(id, securefoo)
self.users.setUser(securefoo)
channel = ircdb.IrcChannel()
self.channels.setChannel(self.channel, channel)
@ -533,7 +533,7 @@ class CheckCapabilityTestCase(IrcdbTestCase):
id = self.users.getUserId('nothing')
u = self.users.getUser(id)
u.addCapability(self.chanop)
self.users.setUser(id, u)
self.users.setUser(u)
self.failUnless(self.checkCapability(self.nothing, self.chancap))
self.channels.setChannel(self.channel, self.channelnothing)
self.failUnless(self.checkCapability(self.nothing, self.chancap))
@ -551,7 +551,7 @@ class CheckCapabilityTestCase(IrcdbTestCase):
id = self.users.getUserId(self.securefoo)
u = self.users.getUser(id)
u.addAuth(self.securefoo)
self.users.setUser(id, u)
self.users.setUser(u)
try:
originalConfDefaultAllow = conf.supybot.capabilities.default()
conf.supybot.capabilities.default.set('False')