maybe bad python, but a start
authorx2000habouzit <x2000habouzit>
Wed, 8 Sep 2004 10:14:47 +0000 (10:14 +0000)
committerx2000habouzit <x2000habouzit>
Wed, 8 Sep 2004 10:14:47 +0000 (10:14 +0000)
scripts/mailman/mailman-rpc.py

index 5f91221..bc83a35 100755 (executable)
@@ -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()