Made configurable.

This commit is contained in:
Jeremy Fincher 2003-12-10 06:58:17 +00:00
parent 5980afc86f
commit 9678560c98
2 changed files with 48 additions and 9 deletions

View File

@ -37,23 +37,43 @@ __revision__ = "$Id$"
import plugins
import irclib
import ircmsgs
import ircutils
import callbacks
import configurable
###
# RootWarner: Warns users who join a channel as root.
###
class RootWarner(irclib.IrcCallback):
class RootWarner(callbacks.Privmsg, configurable.Mixin):
configurables = configurable.Dictionary(
[('warn', configurable.BoolType, True,
"""Determines whether the bot will warn people who join the channel
with an ident of 'root' or '~root'."""),
('warning', configurable.StrType,
'Don\'t IRC as root -- it\'s very possible that there is a '
'security flaw latent in your irc client (remember the BitchX '
'format string vulnerabilities of days past?) and if you\'re '
'IRCing as root, your entire box could be compromised.',
"""The message that is to be sent to users joining the channel with
an ident of 'root' or '~root'."""),
('kick', configurable.BoolType, False,
"""Determines whether the bot will kick people who join the channel
with an ident of 'root' or '~root'.""")]
)
def __init__(self):
callbacks.Privmsg.__init__(self)
configurable.Mixin.__init__(self)
def doJoin(self, irc, msg):
user = ircutils.userFromHostmask(msg.prefix)
if user == 'root' or user == '~root':
irc.queueMsg(ircmsgs.privmsg(msg.nick,
'Don\'t IRC as root -- it\'s very possible that there is a '\
'security flaw in latent in your irc client (remember the '\
'BitchX format string vulnerabilities of days past?) and if '\
'you\'re IRCing as root, your entire box could be compromised.'))
channel = msg.args[0]
s = self.configurables.get('warning', channel)
if self.configurables.get('warn', channel):
irc.queueMsg(ircmsgs.privmsg(msg.nick, s))
if self.configurables.get('kick', channel):
irc.queueMsg(ircmsgs.kick(channel, msg.nick, s))
Class = RootWarner
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:

View File

@ -33,7 +33,6 @@ from testsupport import *
class RootWarnerTestCase(PluginTestCase):
plugins = ('RootWarner',)
def test(self):
self.irc.feedMsg(ircmsgs.join('#foo', prefix='foo!root@host'))
self.assertNotError(' ')
@ -41,6 +40,26 @@ class RootWarnerTestCase(PluginTestCase):
self.assertNotError(' ')
self.irc.feedMsg(ircmsgs.join('#foo', prefix='foo!~foo@host'))
self.assertNoResponse(' ', 1)
def testConfigWarn(self):
self.irc.feedMsg(ircmsgs.join('#foo', prefix='foo!root@host'))
self.assertNotError(' ')
self.assertNotError('config #foo warn off')
self.irc.feedMsg(ircmsgs.join('#foo', prefix='foo!root@host'))
self.assertNoResponse(' ', 1)
def testConfigKick(self):
self.irc.feedMsg(ircmsgs.join('#foo', prefix='foo!root@host'))
self.assertNotError(' ')
self.assertNotError('config #foo warn off')
self.assertNotError('config #foo kick on')
self.irc.feedMsg(ircmsgs.join('#foo', prefix='foo!root@host'))
m = self.getMsg(' ')
self.assertEqual(m.command, 'KICK')