diff -r 000000000000 -r a3b6e531f0d2 iro/xmlrpc/SecureUserdbXMLRPCServer.py --- /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