52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
import md5
|
|
from logger import Logger
|
|
import Entry
|
|
|
|
class AdminFuncException(Exception):
|
|
def __init__(self, msg):
|
|
Logger.log("Exception in AdminFuncs: %s" % msg)
|
|
self.msg = msg
|
|
|
|
class AdminFuncs(object):
|
|
@classmethod
|
|
def setParams(cls, entries, customers):
|
|
cls.entries = entries
|
|
cls.customers = customers
|
|
|
|
@classmethod
|
|
def register(cls, dynid, subdomain, zone, sharedSecret, checksum):
|
|
try:
|
|
customer = AdminFuncs.customers[zone]
|
|
except KeyError:
|
|
raise AdminFuncException("access denied")
|
|
|
|
adminPwd = customer.adminPwd
|
|
maxEntries = customer.maxEntries
|
|
|
|
di = "%s %s %s %s %s" % (dynid, subdomain, zone, sharedSecret, adminPwd)
|
|
d = md5.new(di).hexdigest()
|
|
Logger.debug("%s, received: %s, calculated: %s" % (di, checksum, d))
|
|
if d != checksum:
|
|
raise AdminFuncException("access denied")
|
|
|
|
if AdminFuncs.entries.has_key(dynid):
|
|
raise AdminFuncException("duplicate dynid")
|
|
|
|
entryCnt = 0
|
|
for entry in AdminFuncs.entries.values():
|
|
if entry.zone == zone:
|
|
entryCnt += 1
|
|
if entry.name == subdomain and entry.zone == zone:
|
|
raise AdminFuncException("duplicate full name")
|
|
|
|
if entryCnt >= maxEntries and maxEntries != 0:
|
|
raise AdminFuncException("too much entries")
|
|
|
|
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
|
|
AdminFuncs.entries[dynid] = newEntry
|
|
|
|
Logger.log("Added: %s" % di)
|
|
|
|
|
|
|