yadyn/server/AdminFuncs.py

52 lines
1.6 KiB
Python
Raw Normal View History

2009-02-19 22:07:34 +01:00
import md5
from logger import Logger
import Entry
2009-02-19 17:54:22 +01:00
class AdminFuncException(Exception):
def __init__(self, msg):
Logger.log("Exception in AdminFuncs: %s" % msg)
self.msg = msg
class AdminFuncs(object):
2009-02-19 22:07:34 +01:00
@classmethod
2009-02-21 20:35:51 +01:00
def setParams(cls, entries, customers):
2009-02-19 22:07:34 +01:00
cls.entries = entries
2009-02-21 20:35:51 +01:00
cls.customers = customers
2009-02-19 22:07:34 +01:00
@classmethod
def register(cls, dynid, subdomain, zone, sharedSecret, checksum):
2009-02-21 20:35:51 +01:00
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)
2009-02-19 22:07:34 +01:00
d = md5.new(di).hexdigest()
Logger.debug("%s, received: %s, calculated: %s" % (di, checksum, d))
if d != checksum:
2009-02-21 20:35:51 +01:00
raise AdminFuncException("access denied")
2009-02-19 17:54:22 +01:00
2009-02-19 22:07:34 +01:00
if AdminFuncs.entries.has_key(dynid):
raise AdminFuncException("duplicate dynid")
2009-02-19 17:54:22 +01:00
2009-02-21 20:35:51 +01:00
entryCnt = 0
2009-02-19 22:07:34 +01:00
for entry in AdminFuncs.entries.values():
2009-02-21 20:35:51 +01:00
if entry.zone == zone:
entryCnt += 1
2009-02-19 22:07:34 +01:00
if entry.name == subdomain and entry.zone == zone:
raise AdminFuncException("duplicate full name")
2009-02-19 17:54:22 +01:00
2009-02-21 20:35:51 +01:00
if entryCnt >= maxEntries and maxEntries != 0:
raise AdminFuncException("too much entries")
2009-02-19 22:07:34 +01:00
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
AdminFuncs.entries[dynid] = newEntry
2009-02-21 21:02:18 +01:00
Logger.log("Added: %s" % di)
2009-02-19 22:07:34 +01:00
2009-02-19 17:54:22 +01:00