iro/xmlrpc/SecureUserdbXMLRPCServer.py
author Sandro Knauß <knauss@netzguerilla.net>
Sat, 10 Mar 2012 19:01:31 +0100
branchdevel
changeset 220 602720314930
parent 67 d1912509f375
permissions -rw-r--r--
adding config.Config.sampleConf for creating a sample configuration
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
from SecureAuthentificateXMLRPCServer import  SecureAuthentificateXMLRPCRequestHandler
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
from SecureXMLRPCServer import SecureXMLRPCServer
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
     3
import os, hashlib
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
class UserDB:
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
    '''
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
    class for managing all xmlrpc users
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
    - each user is indyfied via a hash value, which is created out of the username + password
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
    '''
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
    def __init__(self,userClass, userlist,jobqueue):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
        self.salt=os.urandom(20)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
        self.jobqueue=jobqueue
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
        self.userClass=userClass
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
        self.userlist={}
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
        for user in userlist:
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
            self.createUser(user)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
    def createHash(self,user):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
        """
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
        returns a hash out of username and the password and self.salt
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
        user is a directory with two keys: username and password
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
        """
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
    23
        m=hashlib.sha512()
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
        m.update(user["name"])
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
        m.update(self.salt)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
        m.update(user["password"])
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
        return m.hexdigest()
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
    def createUser(self,user):
67
d1912509f375 adding overview acounting
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    30
        self.userlist[self.createHash(user)]=self.userClass(user["name"],self.jobqueue)
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
    def __getitem__(self,key):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
        return self.userlist[key]
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
        
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
class SecureAuthentificateXMLRPCRequestHandler2(SecureAuthentificateXMLRPCRequestHandler):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
    def testUser(self,username,password):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
        """
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
        Function for testing authentification
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
        """
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
        return self.server.activateUser(username,password)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
class SecureUserDBXMLRPCServer(SecureXMLRPCServer):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
    def __init__(self, addr, userdb, 
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
                 requestHandler=SecureAuthentificateXMLRPCRequestHandler2,
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
                 certificate="server.cert", privatekey="server.pem",
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
                 logRequests=1):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
        SecureXMLRPCServer.__init__(self, addr, requestHandler, certificate, privatekey, logRequests)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
        self.relam="xmlrpc"
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
        self.userdb=userdb
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
    def activateUser(self,username,password):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
        """
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
        Function is executed, if someone ant to login
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
        -searches for a regular user in the userdb and then put all methods of the user as XMLRPC
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
        returns weather a user was found or not
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
        """
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
        try:
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
            user = self.userdb[self.userdb.createHash({"name":username,"password":password})]
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
            self.register_instance(user)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    61
            return True
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
        except KeyError:
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    63
            return False