diff --git a/server/XmlRpcReceiver.py b/server/XmlRpcReceiver.py index 50cfbb2..f6791b0 100644 --- a/server/XmlRpcReceiver.py +++ b/server/XmlRpcReceiver.py @@ -4,7 +4,19 @@ import Event from logger import Logger from SimpleXMLRPCServer import SimpleXMLRPCServer +import Entry + +class LocalExcepion(Exception): + def __init__(self, msg): + self.msg = msg + class XmlRpcServer(SimpleXMLRPCServer): + @classmethod + def setClassParams(cls, entries, adminPwd): + cls.entries = entries + cls.adminPwd = adminPwd + + def _dispatch(self, method, params): try: # We are forcing the 'export_' prefix on methods that are @@ -16,15 +28,32 @@ class XmlRpcServer(SimpleXMLRPCServer): else: return func(*params) - def export_add(self, x, y): - return x + y - + def export_register(self, subdomain, sharedSecret, email): + try: + dynid = subdomain + zone = 'yadynns.net' + + if XmlRpcServer.entries.has_key(dynid): + raise LocalException("duplicate dynid") + for entry in MyCmd.entries.values(): + if entry.name == name and entry.zone == zone: + raise LocalException("duplicate full name") + newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone) + XmlRpcServer.entries[dynid] = newEntry + + return 'ok' + except LocalException, e: + return 'nok ' + e.msg + + + class XmlRpcReceiver(threading.Thread): - def __init__(self, xmlRpcRecvAddr): + def __init__(self, xmlRpcRecvAddr, entries, adminPwd): threading.Thread.__init__(self) self.xmlRpcRecvAddr = xmlRpcRecvAddr + XmlRpcServer.setClassParams(entries, adminPwd) self.setDaemon(True) def run(self): diff --git a/server/yadyn b/server/yadyn index 1b4fe5c..aa4b818 100755 --- a/server/yadyn +++ b/server/yadyn @@ -12,6 +12,7 @@ import DnsHandler import Expirer import DynReceiver import CmdReceiver +import XmlRpcReceiver import Entry import Event @@ -82,6 +83,12 @@ try: cmdReceiver.start() Logger.debug("CmdReceiver started") + xmlRpcReceiver = XmlRpcReceiver.XmlRpcReceiver(("", 8024), entries, ADMIN_PWD) + xmlRpcReceiver.start() + Logger.debug("XmlRpcReceiver started") + + + Logger.log("yadyn running") while True: entries.sync()