iro/xmlrpc/SecureUserdbXMLRPCServer.py
changeset 0 a3b6e531f0d2
child 61 04dfd43dfecc
--- /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