improve http and xmlrpc interfaces
This commit is contained in:
parent
a2d3bd6e79
commit
399483b7b5
@ -1,3 +1,7 @@
|
|||||||
|
import md5
|
||||||
|
from logger import Logger
|
||||||
|
import Entry
|
||||||
|
|
||||||
class AdminFuncException(Exception):
|
class AdminFuncException(Exception):
|
||||||
def __init__(self, msg):
|
def __init__(self, msg):
|
||||||
Logger.log("Exception in AdminFuncs: %s" % msg)
|
Logger.log("Exception in AdminFuncs: %s" % msg)
|
||||||
@ -10,12 +14,12 @@ class AdminFuncs(object):
|
|||||||
cls.adminPwd = adminPwd
|
cls.adminPwd = adminPwd
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def register(cls, dynid, subdomain, zone, sharedSecret):
|
def register(cls, dynid, subdomain, zone, sharedSecret, checksum):
|
||||||
di = "%s %s %s %s %s" % (dynid, subdomain, zone, sharedSecret, AdminFuncs.adminPwd)
|
di = "%s %s %s %s %s" % (dynid, subdomain, zone, sharedSecret, AdminFuncs.adminPwd)
|
||||||
d = md5.new(di).hexdigest()
|
d = md5.new(di).hexdigest()
|
||||||
Logger.debug("%s, received: %s, calculated: %s" % (di, checksum, d))
|
Logger.debug("%s, received: %s, calculated: %s" % (di, checksum, d))
|
||||||
if d != self.checksum:
|
if d != checksum:
|
||||||
raise AdminFuncException("access denied" % di)
|
raise AdminFuncException("access denied: %s" % di)
|
||||||
|
|
||||||
if AdminFuncs.entries.has_key(dynid):
|
if AdminFuncs.entries.has_key(dynid):
|
||||||
raise AdminFuncException("duplicate dynid")
|
raise AdminFuncException("duplicate dynid")
|
||||||
@ -27,3 +31,5 @@ class AdminFuncs(object):
|
|||||||
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
|
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
|
||||||
AdminFuncs.entries[dynid] = newEntry
|
AdminFuncs.entries[dynid] = newEntry
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ class HttpCmdHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
cls.entries = entries
|
cls.entries = entries
|
||||||
cls.adminPwd = adminPwd
|
cls.adminPwd = adminPwd
|
||||||
cls.dnsq = dnsq
|
cls.dnsq = dnsq
|
||||||
cls.nullAddress = nullAdress
|
cls.nullAddress = nullAddress
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
Logger.log("Request: %s, %s" % (self.path, self.client_address))
|
Logger.log("Request: %s, %s" % (self.path, self.client_address))
|
||||||
@ -47,10 +47,12 @@ class HttpCmdHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
raise LocalException('unknown cmd')
|
raise LocalException('unknown cmd')
|
||||||
|
|
||||||
self.send_response(200, "OK")
|
self.send_response(200, "OK")
|
||||||
|
self.send_header("Content-Length", "0")
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
except IllegalEventException, e:
|
except IllegalEventException, e:
|
||||||
Logger.log("Some failure (%s), not notifying user" % e.msg)
|
Logger.log("Some failure (%s), not notifying user" % e.msg)
|
||||||
self.send_response(200, "OK")
|
self.send_response(200, "OK")
|
||||||
|
self.send_header("Content-Length", "0")
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
except AdminFuncs.AdminFuncException, e:
|
except AdminFuncs.AdminFuncException, e:
|
||||||
self.send_response(400, e.msg)
|
self.send_response(400, e.msg)
|
||||||
@ -59,6 +61,7 @@ class HttpCmdHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
self.send_response(400, e.msg)
|
self.send_response(400, e.msg)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
|
|
||||||
def register(self, c):
|
def register(self, c):
|
||||||
try:
|
try:
|
||||||
dynid = c['dynid'][0]
|
dynid = c['dynid'][0]
|
||||||
@ -69,7 +72,7 @@ class HttpCmdHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
except KeyError, e:
|
except KeyError, e:
|
||||||
raise LocalException('Parameter missing: ' + str(e))
|
raise LocalException('Parameter missing: ' + str(e))
|
||||||
|
|
||||||
AdminFuncs.register(dynid, subdomain, zone, sharedSecret)
|
AdminFuncs.AdminFuncs.register(dynid, subdomain, zone, sharedSecret, checkSum)
|
||||||
|
|
||||||
def setAddress(self, c, address):
|
def setAddress(self, c, address):
|
||||||
try:
|
try:
|
||||||
|
@ -28,17 +28,15 @@ class XmlRpcServer(SimpleXMLRPCServer):
|
|||||||
else:
|
else:
|
||||||
return func(*params)
|
return func(*params)
|
||||||
|
|
||||||
def export_register(self, dynid, subdomain, zone, sharedSecret, email):
|
def export_register(self, dynid, subdomain, zone, sharedSecret, checkSum, email):
|
||||||
try:
|
try:
|
||||||
AdminFuncs.register(dynid, subdomain, zone, sharedSecret)
|
AdminFuncs.register(dynid, subdomain, zone, sharedSecret, checkSum)
|
||||||
return 'ok'
|
return 'ok'
|
||||||
except AdminFuncs.AdminFuncException, e:
|
except AdminFuncs.AdminFuncException, e:
|
||||||
return 'not ok ' + e.msg
|
return 'not ok ' + e.msg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class XmlRpcReceiver(threading.Thread):
|
class XmlRpcReceiver(threading.Thread):
|
||||||
def __init__(self, xmlRpcRecvAddr, entries, adminPwd):
|
def __init__(self, xmlRpcRecvAddr, entries, adminPwd):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import Queue
|
import Queue
|
||||||
import time
|
import time
|
||||||
@ -16,6 +16,7 @@ import XmlRpcReceiver
|
|||||||
import HttpCmdReceiver
|
import HttpCmdReceiver
|
||||||
import Entry
|
import Entry
|
||||||
import Event
|
import Event
|
||||||
|
import AdminFuncs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -65,6 +66,8 @@ try:
|
|||||||
|
|
||||||
Event.Event.setParams(entries, MSG_TIME_CORRIDOR, dnsq)
|
Event.Event.setParams(entries, MSG_TIME_CORRIDOR, dnsq)
|
||||||
|
|
||||||
|
AdminFuncs.AdminFuncs.setParams(entries, ADMIN_PWD)
|
||||||
|
|
||||||
dynHandler = DynHandler.DynHandler(eventq)
|
dynHandler = DynHandler.DynHandler(eventq)
|
||||||
dynHandler.start()
|
dynHandler.start()
|
||||||
Logger.debug("DynHandler started")
|
Logger.debug("DynHandler started")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user