diff --git a/plugins/RootWarner.py b/plugins/RootWarner.py index 7e04f1cb6..9cd4f7ece 100644 --- a/plugins/RootWarner.py +++ b/plugins/RootWarner.py @@ -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: diff --git a/test/test_RootWarner.py b/test/test_RootWarner.py index a1e14555c..0a3769309 100644 --- a/test/test_RootWarner.py +++ b/test/test_RootWarner.py @@ -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') + + + +