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 |
|