iro/xmlrpc/SecureUserdbXMLRPCServer.py
changeset 302 3f4bdea2abbf
parent 90 eb04ac3a8327
parent 301 d5ebbcccc41b
child 303 9708742ff89c
equal deleted inserted replaced
90:eb04ac3a8327 302:3f4bdea2abbf
     1 from SecureAuthentificateXMLRPCServer import  SecureAuthentificateXMLRPCRequestHandler
       
     2 from SecureXMLRPCServer import SecureXMLRPCServer
       
     3 import os, hashlib
       
     4 
       
     5 class UserDB:
       
     6     '''
       
     7     class for managing all xmlrpc users
       
     8     - each user is indyfied via a hash value, which is created out of the username + password
       
     9     '''
       
    10     def __init__(self,userClass, userlist,jobqueue):
       
    11         self.salt=os.urandom(20)
       
    12         self.jobqueue=jobqueue
       
    13         self.userClass=userClass
       
    14         self.userlist={}
       
    15         for user in userlist:
       
    16             self.createUser(user)
       
    17 
       
    18     def createHash(self,user):
       
    19         """
       
    20         returns a hash out of username and the password and self.salt
       
    21         user is a directory with two keys: username and password
       
    22         """
       
    23         m=hashlib.sha512()
       
    24         m.update(user["name"])
       
    25         m.update(self.salt)
       
    26         m.update(user["password"])
       
    27         return m.hexdigest()
       
    28 
       
    29     def createUser(self,user):
       
    30         self.userlist[self.createHash(user)]=self.userClass(user["name"],self.jobqueue)
       
    31 
       
    32     def __getitem__(self,key):
       
    33         return self.userlist[key]
       
    34 
       
    35         
       
    36 class SecureAuthentificateXMLRPCRequestHandler2(SecureAuthentificateXMLRPCRequestHandler):
       
    37     def testUser(self,username,password):
       
    38         """
       
    39         Function for testing authentification
       
    40         """
       
    41         return self.server.activateUser(username,password)
       
    42 
       
    43 class SecureUserDBXMLRPCServer(SecureXMLRPCServer):
       
    44     def __init__(self, addr, userdb, 
       
    45                  requestHandler=SecureAuthentificateXMLRPCRequestHandler2,
       
    46                  certificate="server.cert", privatekey="server.pem",
       
    47                  logRequests=1):
       
    48         SecureXMLRPCServer.__init__(self, addr, requestHandler, certificate, privatekey, logRequests)
       
    49         self.relam="xmlrpc"
       
    50         self.userdb=userdb
       
    51 
       
    52     def activateUser(self,username,password):
       
    53         """
       
    54         Function is executed, if someone ant to login
       
    55         -searches for a regular user in the userdb and then put all methods of the user as XMLRPC
       
    56         returns weather a user was found or not
       
    57         """
       
    58         try:
       
    59             user = self.userdb[self.userdb.createHash({"name":username,"password":password})]
       
    60             self.register_instance(user)
       
    61             return True
       
    62         except KeyError:
       
    63             return False