import threading import time import Event from logger import Logger from SimpleXMLRPCServer import SimpleXMLRPCServer import AdminFuncs import Entry class LocalException(Exception): def __init__(self, msg): self.msg = msg class XmlRpcServer(SimpleXMLRPCServer): @classmethod def setClassParams(cls, entries): cls.entries = entries def _dispatch(self, method, params): try: # We are forcing the 'export_' prefix on methods that are # callable through XML-RPC to prevent potential security # problems func = getattr(self, 'export_' + method) except AttributeError: raise Exception('method "%s" is not supported' % method) else: return func(*params) def export_register(self, dynid, subdomain, zone, sharedSecret, checkSum, email): try: AdminFuncs.AdminFuncs.register(dynid, subdomain, zone, sharedSecret, checkSum) return 'ok' except AdminFuncs.AdminFuncException, e: return 'not ok ' + e.msg class XmlRpcReceiver(threading.Thread): def __init__(self, xmlRpcRecvAddr, entries): threading.Thread.__init__(self) self.xmlRpcRecvAddr = xmlRpcRecvAddr XmlRpcServer.setClassParams(entries) self.setDaemon(True) def run(self): server = XmlRpcServer(self.xmlRpcRecvAddr) server.serve_forever()