diff -r a3b6e531f0d2 -r 18918fbc397c iro/xmlserver_test.py --- a/iro/xmlserver_test.py Thu Oct 22 10:00:01 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -# 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() - -