--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/xmlrpc/SecureUserdbXMLRPCServer.py Thu Oct 22 10:00:01 2009 +0200
@@ -0,0 +1,63 @@
+from SecureAuthentificateXMLRPCServer import SecureAuthentificateXMLRPCRequestHandler
+from SecureXMLRPCServer import SecureXMLRPCServer
+import os, md5
+
+class UserDB:
+ '''
+ class for managing all xmlrpc users
+ - each user is indyfied via a hash value, which is created out of the username + password
+ '''
+ def __init__(self,userClass, userlist,jobqueue):
+ self.salt=os.urandom(20)
+ self.jobqueue=jobqueue
+ self.userClass=userClass
+ self.userlist={}
+ for user in userlist:
+ self.createUser(user)
+
+ def createHash(self,user):
+ """
+ returns a hash out of username and the password and self.salt
+ user is a directory with two keys: username and password
+ """
+ m=md5.new()
+ m.update(user["name"])
+ m.update(self.salt)
+ m.update(user["password"])
+ return m.hexdigest()
+
+ def createUser(self,user):
+ self.userlist[self.createHash(user)]=self.userClass(self.jobqueue)
+
+ def __getitem__(self,key):
+ return self.userlist[key]
+
+
+class SecureAuthentificateXMLRPCRequestHandler2(SecureAuthentificateXMLRPCRequestHandler):
+ def testUser(self,username,password):
+ """
+ Function for testing authentification
+ """
+ return self.server.activateUser(username,password)
+
+class SecureUserDBXMLRPCServer(SecureXMLRPCServer):
+ def __init__(self, addr, userdb,
+ requestHandler=SecureAuthentificateXMLRPCRequestHandler2,
+ certificate="server.cert", privatekey="server.pem",
+ logRequests=1):
+ SecureXMLRPCServer.__init__(self, addr, requestHandler, certificate, privatekey, logRequests)
+ self.relam="xmlrpc"
+ self.userdb=userdb
+
+ def activateUser(self,username,password):
+ """
+ Function is executed, if someone ant to login
+ -searches for a regular user in the userdb and then put all methods of the user as XMLRPC
+ returns weather a user was found or not
+ """
+ try:
+ user = self.userdb[self.userdb.createHash({"name":username,"password":password})]
+ self.register_instance(user)
+ return True
+ except KeyError:
+ return False