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