From: x2000habouzit Date: Wed, 8 Sep 2004 10:14:47 +0000 (+0000) Subject: maybe bad python, but a start X-Git-Tag: xorg/old~1552 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=53261ef2c39d07866ac7ea68ae66b3e8de6df7eb;p=platal.git maybe bad python, but a start --- diff --git a/scripts/mailman/mailman-rpc.py b/scripts/mailman/mailman-rpc.py index 5f91221..bc83a35 100755 --- a/scripts/mailman/mailman-rpc.py +++ b/scripts/mailman/mailman-rpc.py @@ -1,6 +1,7 @@ #!/usr/bin/env python from SimpleXMLRPCServer import SimpleXMLRPCServer +from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler from Mailman import mm_cfg from Mailman import MailList @@ -10,8 +11,42 @@ from Mailman.i18n import _ class UserDesc: pass -def lists(): +#------------------------------------------------ +# Manage Basic authentication +# + +class BasicAuthXMLRPCRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): + + """XMLRPC Request Handler + This request handler is used to provide BASIC HTTP user authentication. + It first overloads the do_POST() function, authenticates the user, then + calls the super.do_POST(). + """ + + def do_POST(self): + headers = self.headers + print headers + if not headers.has_key("authorization"): + self.send_response(401) + self.end_headers() + auth = headers["authorization"] + auth = auth.replace("Basic ","") + decoded_auth = base64.decodestring(auth) + try: + user, passwd = decoded_auth.split(':') + except: + + # Call super.do_POST() to do the actual work + SimpleXMLRPCServer.SimpleXMLRPCRequestHandler.do_POST(self) + + +#------------------------------------------------ +# Procedures +# + +def lists_names(): names = Utils.list_names() + names.sort() return names def members(listname): @@ -30,7 +65,21 @@ def subscribe(listname,name,mail): userdesc.fullname, userdesc.address = (name,mail) userdesc.digest = 0 try: - mlist.AddMember(userdesc) + mlist.ApprovedAddMember(userdesc) + mlist.Save() + except Exception, e: + mlist.Unlock() + return 0 + mlist.Unlock() + return 1 + +def unsubscribe(listname,mail): + try: + mlist = MailList.MailList(listname, lock=True) + except Errors.MMListError, e: + return 0 + try: + mlist.ApprovedDeleteMember(mail, 'xml-rpc iface', False, False); mlist.Save() except Exception, e: mlist.Unlock() @@ -38,11 +87,15 @@ def subscribe(listname,name,mail): mlist.Unlock() return 1 +#------------------------------------------------ +# server +# server = SimpleXMLRPCServer(("localhost", 4949)) -server.register_function(lists) +server.register_function(lists_names) server.register_function(members) server.register_function(subscribe) +server.register_function(unsubscribe) server.register_introspection_functions() server.serve_forever()