Fix up LpLogin, errrr, FreenodeAuth
This commit is contained in:
parent
23b50f539a
commit
6ec9cd85da
|
@ -0,0 +1,3 @@
|
||||||
|
Allows any nickserv-identified user to login without password. Written
|
||||||
|
specifically for Freenode. Can also auto-create accounts from a list with
|
||||||
|
nicknames.
|
|
@ -1,6 +1,5 @@
|
||||||
###
|
###
|
||||||
# Copyright (c) 2007, Dennis Kaarsemaker
|
# Copyright (c) 2007, Dennis Kaarsemaker
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of version 2 of the GNU General Public License as
|
# it under the terms of version 2 of the GNU General Public License as
|
||||||
|
@ -14,17 +13,16 @@
|
||||||
###
|
###
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Add a description of the plugin (to be presented to the user inside the wizard)
|
Let nickserv-identified users log in without password
|
||||||
here. This should describe *what* the plugin does.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import supybot
|
import supybot
|
||||||
import supybot.world as world
|
import supybot.world as world
|
||||||
|
|
||||||
__version__ = "0.1"
|
__version__ = "0.2"
|
||||||
__author__ = supybot.Author("Dennis Kaarsemaker","Seveas","dennis@kaarsemaker.net")
|
__author__ = supybot.Author("Dennis Kaarsemaker","Seveas","dennis@kaarsemaker.net")
|
||||||
__contributors__ = {}
|
__contributors__ = {}
|
||||||
__url__ = 'http://bots.ubuntulinux.nl/'
|
__url__ = 'http://ubotu.ubuntu-nl.org/'
|
||||||
|
|
||||||
import config
|
import config
|
||||||
reload(config)
|
reload(config)
|
|
@ -0,0 +1,24 @@
|
||||||
|
###
|
||||||
|
# Copyright (c) 2007, Dennis Kaarsemaker
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of version 2 of the GNU General Public License as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
###
|
||||||
|
|
||||||
|
import supybot.conf as conf
|
||||||
|
import supybot.registry as registry
|
||||||
|
|
||||||
|
def configure(advanced):
|
||||||
|
from supybot.questions import expect, anything, something, yn
|
||||||
|
conf.registerPlugin('FreenodeAuth', True)
|
||||||
|
|
||||||
|
FreenodeAuth = conf.registerPlugin('FreenodeAuth')
|
||||||
|
conf.registerGlobalValue(FreenodeAuth, 'UserList',
|
||||||
|
registry.String('', """Filename of file with list of users""",private=True))
|
|
@ -1,7 +1,14 @@
|
||||||
###
|
###
|
||||||
# Copyright (c) 2007, Dennis Kaarsemaker
|
# Copyright (c) 2007, Dennis Kaarsemaker
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of version 2 of the GNU General Public License as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
###
|
###
|
||||||
|
|
||||||
|
@ -16,20 +23,10 @@ import supybot.conf as conf
|
||||||
import supybot.schedule as schedule
|
import supybot.schedule as schedule
|
||||||
import random, os
|
import random, os
|
||||||
|
|
||||||
class LpLogin(callbacks.Plugin):
|
class FreenodeAuth(callbacks.Plugin):
|
||||||
"""Add the help for "@plugin help LpLogin" here
|
"""Use @login to login"""
|
||||||
This should describe *how* to use this plugin."""
|
|
||||||
threaded = True
|
threaded = True
|
||||||
|
|
||||||
def __init__(self, irc):
|
|
||||||
callbacks.Plugin.__init__(self, irc)
|
|
||||||
try:
|
|
||||||
schedule.removeEvent(self.name() + '.nickreload')
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
# Reload every 6 hours
|
|
||||||
#schedule.addPeriodicEvent(lambda: self.reportnewbugs(irc), 60*60*6, name=self.name() + '.nickreload')
|
|
||||||
|
|
||||||
def loadnicks(self):
|
def loadnicks(self):
|
||||||
uf = self.registryValue('UserList')
|
uf = self.registryValue('UserList')
|
||||||
if not uf or not os.path.exists(uf):
|
if not uf or not os.path.exists(uf):
|
||||||
|
@ -41,13 +38,7 @@ class LpLogin(callbacks.Plugin):
|
||||||
knownusers = [x.lower() for x in users.split() if x]
|
knownusers = [x.lower() for x in users.split() if x]
|
||||||
self.knownusers = knownusers
|
self.knownusers = knownusers
|
||||||
allusers = [u.name.lower() for u in ircdb.users.itervalues()]
|
allusers = [u.name.lower() for u in ircdb.users.itervalues()]
|
||||||
#print knownusers, allusers
|
|
||||||
|
|
||||||
if self.registryValue('DeleteUnknowns'):
|
|
||||||
to_delete = [x for x in allusers if x not in knownusers and not
|
|
||||||
ircdb.users.getUser(x)._checkCapability('owner')]
|
|
||||||
for u in to_delete:
|
|
||||||
self.log.info("Would delete %s" % u)
|
|
||||||
to_add = [x for x in knownusers if x not in allusers]
|
to_add = [x for x in knownusers if x not in allusers]
|
||||||
for a in to_add:
|
for a in to_add:
|
||||||
self.log.info("Adding %s" % a)
|
self.log.info("Adding %s" % a)
|
||||||
|
@ -83,12 +74,13 @@ class LpLogin(callbacks.Plugin):
|
||||||
try:
|
try:
|
||||||
user = ircdb.users.getUser(msg.prefix[:msg.prefix.find('!')])
|
user = ircdb.users.getUser(msg.prefix[:msg.prefix.find('!')])
|
||||||
except:
|
except:
|
||||||
irc.error(conf.supybot.replies.incorrectAuthentication())
|
self.loadnicks()
|
||||||
return
|
try:
|
||||||
|
user = ircdb.users.getUser(msg.prefix[:msg.prefix.find('!')])
|
||||||
|
except:
|
||||||
|
irc.error(conf.supybot.replies.incorrectAuthentication())
|
||||||
|
return
|
||||||
user.addAuth(msg.prefix)
|
user.addAuth(msg.prefix)
|
||||||
ircdb.users.setUser(user, flush=False)
|
ircdb.users.setUser(user, flush=False)
|
||||||
login = wrap(login)
|
login = wrap(login)
|
||||||
Class = LpLogin
|
Class = FreenodeAuth
|
||||||
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
###
|
||||||
|
# Copyright (c) 2007, Dennis Kaarsemaker
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of version 2 of the GNU General Public License as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
###
|
||||||
|
|
||||||
|
from supybot.test import *
|
||||||
|
|
||||||
|
class FreenodeAuthTestCase(PluginTestCase):
|
||||||
|
plugins = ('FreenodeAuth',)
|
|
@ -1 +0,0 @@
|
||||||
Insert a description of your plugin here, with any notes, etc. about using it.
|
|
|
@ -1,20 +0,0 @@
|
||||||
###
|
|
||||||
# Copyright (c) 2007, Dennis Kaarsemaker
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
###
|
|
||||||
|
|
||||||
import supybot.conf as conf
|
|
||||||
import supybot.registry as registry
|
|
||||||
|
|
||||||
def configure(advanced):
|
|
||||||
from supybot.questions import expect, anything, something, yn
|
|
||||||
conf.registerPlugin('LpLogin', True)
|
|
||||||
|
|
||||||
|
|
||||||
LpLogin = conf.registerPlugin('LpLogin')
|
|
||||||
conf.registerGlobalValue(LpLogin, 'UserList',
|
|
||||||
registry.String('', """Filename of file with list of users"""))
|
|
||||||
conf.registerGlobalValue(LpLogin, 'DeleteUnknowns',
|
|
||||||
registry.Boolean(True, """Unregister people not in the list"""))
|
|
|
@ -1,37 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
import urllib, urllib2
|
|
||||||
import xml.dom.minidom as dom
|
|
||||||
import re, sys, optparse
|
|
||||||
|
|
||||||
usage = "Usage: %prog [options] launchpad_group"
|
|
||||||
parser = optparse.OptionParser(usage=usage)
|
|
||||||
parser.add_option("-o", "--output", dest='outfile', help="Output to FILE",
|
|
||||||
metavar="FILE")
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
if len(args) < 1:
|
|
||||||
parser.error('No group specified')
|
|
||||||
lp_group = args[0]
|
|
||||||
if options.outfile:
|
|
||||||
outfd = open(options.outfile,'w')
|
|
||||||
else:
|
|
||||||
outfd = sys.stdout
|
|
||||||
|
|
||||||
people_re = re.compile(r'href="/~([^/"]*)"')
|
|
||||||
nickname_re = re.compile(r'<code.*?120.*?>(.*?)</code>.*\n.*freenode',re.I)
|
|
||||||
def get_group_members(group):
|
|
||||||
nicks = []
|
|
||||||
u = urllib2.urlopen('http://launchpad.net/~%s/+members' % urllib.quote(group))
|
|
||||||
html = u.read().lower()
|
|
||||||
# Split into people and groups
|
|
||||||
p1 = html.find('active members')
|
|
||||||
p2 = html.find('pending members')
|
|
||||||
people = people_re.findall(html[p1:p2])
|
|
||||||
for p in people:
|
|
||||||
u = urllib2.urlopen('http://launchpad.net/~%s' % urllib.quote(p))
|
|
||||||
html = u.read()
|
|
||||||
n = nickname_re.findall(html)
|
|
||||||
nicks += n
|
|
||||||
return [x.lower() for x in nicks]
|
|
||||||
|
|
||||||
outfd.write("\n".join(get_group_members(lp_group)))
|
|
|
@ -1,14 +0,0 @@
|
||||||
###
|
|
||||||
# Copyright (c) 2007, Dennis Kaarsemaker
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
###
|
|
||||||
|
|
||||||
from supybot.test import *
|
|
||||||
|
|
||||||
class LpLoginTestCase(PluginTestCase):
|
|
||||||
plugins = ('LpLogin',)
|
|
||||||
|
|
||||||
|
|
||||||
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
|
Loading…
Reference in New Issue