diff -r 000000000000 -r a3b6e531f0d2 iro/xmlserver_test.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/xmlserver_test.py Thu Oct 22 10:00:01 2009 +0200 @@ -0,0 +1,139 @@ +# Server code + +from xmlrpc import SecureXMLRPCServer,SecureAuthentificateXMLRPCRequestHandler +import md5, time, os + +class Job: + def __init__(self,provider,name): + self.provider=provider + self.name=name + self.status="stopped" + + def start(self): + self.status="started" + + def stop(self): + self.status="stopped" + +class SMSJob(Job): + def __init__(self,provider,message,recipients): + self.message=message + self.recipients=recipients + Job.__init__(self,provider,message) + +class Jobs: + def __init__(self,queue,provider): + self.jobs={} + self.queue=queue + self.provider=provider + + def __getitem__(self,key): + return self.jobs[key] + + def newSMS(self,message,recipients): + job=SMSJob(self.provider,message,recipients) + id = self._createID() + self.jobs[id]=job + #self.queue.put(job) + return id + + def _createID(self): + while True: + m = md5.new() + m.update(str(time.time())) + m.update(os.urandom(10)) + if not self.jobs.has_key(m.hexdigest): + self.jobs[m.hexdigest()]=None + break + return m.hexdigest() + + +class User: + def __init__(self,jobqueue): + self.jobqueue=jobqueue + self.jobs={} + + def status(self,id=None): + if id==None: + jobs=self.jobs + else: + try: + jobs={id:self.jobs[id]} + except: + raise String("No Job with ID: %i" %(id)) + ret={} + for key in jobs: + job=jobs[key] + ret[key]={"name":job.name,"status":job.status} + return ret + + def stop(self,id): + try: + job=self.jobs[id] + except: + raise String("No Job with ID: %i" %(id)) + + job.stop() + + + def startSMS(self,message,recipients): + id = self.jobqueue.newSMS(message,recipients) + self.jobs[id]=self.jobqueue[id] + return id + +class UserDB: + def __init__(self,userlist,jobqueue): + self.salt=os.urandom(20) + self.jobqueue=jobqueue + self.userlist={} + for user in userlist: + self.createUser(user) + + def createHash(self,username,password): + m=md5.new() + m.update(self.salt) + m.update(username) + m.update(password) + return m.hexdigest() + + def createUser(self,user): + self.userlist[self.createHash(user.username,user.password)]=User(self.jobqueue) + + def __getitem__(self,key): + return self.userlist[key] + + +class SecureAuthentificateXMLRPCRequestHandler2(SecureAuthentificateXMLRPCRequestHandler): + + def testUser(self,username,password): + 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.userdb=userdb + + def activateUser(self,username,password): + try: + user = self.userdb[self.userdb.createHash(username,password)] + self.register_instance(user) + return True + except KeyError: + return False + + + +def test(): + server = SecureXMLRPCServer(("localhost", 8000),requestHandler=SecureAuthentificateXMLRPCRequestHandler,certificate="./certs/test.cert.pem",privatekey="./certs/test.key.pem") + server.register_introspection_functions() + server.register_instance(StringFunctions()) + server.register_function(lambda x: x*x, 'square') + server.serve_forever() + +if __name__ == '__main__': + test() + +