from SecureAuthentificateXMLRPCServer import SecureAuthentificateXMLRPCRequestHandler
from SecureXMLRPCServer import SecureXMLRPCServer
import os, hashlib
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=hashlib.sha512()
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(user["name"],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