diff --git a/server/CmdReceiver.py b/server/CmdReceiver.py new file mode 100644 index 0000000..f9d79cf --- /dev/null +++ b/server/CmdReceiver.py @@ -0,0 +1,48 @@ +import SocketServer +import threading +import cmd +import sys + + +class MyCmd(cmd.Cmd): + @classmethod + def setClassParams(cls, entries, adminPwd): + cls.entries = entries + cls.adminPwd = adminPwd + + def __init__(self, i, o): + cmd.Cmd.__init__(self, completekey=None, stdin=i, stdout=o) + cmd.Cmd.use_rawinput = False + self.intro = "yadyn commandline interface\n" + self.prompt = "yadyn> " + + def do_hello(self, l): + self.stdout.write("DO: %s\n" % l) + + def do_quit(self, l): + return True + + + +class CmdHandler(SocketServer.StreamRequestHandler): + def handle(self): + myCmd = MyCmd(self.rfile, self.wfile) + myCmd.cmdloop() + + +class CmdServer(SocketServer.ThreadingTCPServer): + def __init__(self, server_address, RequestHandlerClass): + self.allow_reuse_address = True + SocketServer.ThreadingTCPServer.__init__(self, server_address, RequestHandlerClass) + + +class CmdReceiver(threading.Thread): + def __init__(self, cmdAddr, entries, adminPwd): + threading.Thread.__init__(self) + self.cmdAddr = cmdAddr + MyCmd.setClassParams(entries, adminPwd) + self.setDaemon(True) + + def run(self): + CmdServer(self.cmdAddr, CmdHandler).serve_forever() + diff --git a/server/WebReceiver.py b/server/WebReceiver.py index f6e2cb6..92c4aa9 100644 --- a/server/WebReceiver.py +++ b/server/WebReceiver.py @@ -18,8 +18,10 @@ TEMPLATE_DIR='./templates' class YaDynWebApp(object): @classmethod - def setSessionContainer(cls, sessionContainer): + def setClassParams(cls, sessionContainer, adminPwd, entries): cls.sessionContainer = sessionContainer + cls.adminPwd = adminPwd + cls.entries = entries def __init__(self, sid): self.buf = StringIO.StringIO() @@ -88,7 +90,7 @@ class YaDynWebApp(object): def processAction(self): if self.params.action == "Login": - authTuple = getAuthTuple(self.params.username, self.params.password) + authTuple = self.getAuthTuple(self.params.username, self.params.password) if authTuple: self.params = Params({}) self.sid = str(uuid.uuid1()) @@ -131,13 +133,16 @@ class YaDynWebApp(object): return self.buf.getvalue() + def getAuthTuple(self, username, password): + if username == "admin" and password == self.adminPwd: + return {'username': username, 'password': password, 'role': 'admin'} + elif self.entries.has_key(username) and self.entries[username].sharedSecret == password: + return {'username': username, 'password': password, 'role': 'user'} + + class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): server_version = "YaDynWebAppHTTP/1.0" - @classmethod - def setParams(cls, entries): - cls.entries = entries - def log_message(self, format, *args): Logger.log(format%args) @@ -206,17 +211,18 @@ class MyServer(SocketServer.ThreadingTCPServer): class WebReceiver(threading.Thread): - def __init__(self, webAddr, entries): + def __init__(self, webAddr, entries, adminPwd): threading.Thread.__init__(self) self.webAddr = webAddr - MyHandler.setParams(entries) + self.entries = entries + self.adminPwd = adminPwd self.setDaemon(True) def run(self): self.sessionContainer = SessionContainer(60, 600) self.sessionContainer.setDaemon(True) self.sessionContainer.start() - YaDynWebApp.setSessionContainer(self.sessionContainer) + YaDynWebApp.setClassParams(self.sessionContainer, self.adminPwd, self.entries) MyServer(self.webAddr, MyHandler).serve_forever() diff --git a/server/logger.py b/server/logger.py deleted file mode 100644 index e035109..0000000 --- a/server/logger.py +++ /dev/null @@ -1,26 +0,0 @@ -import syslog - - -class Logger(object): - def log(data): - syslog.syslog(syslog.LOG_INFO, data) - if Logger.debugFlag: - print data - - def debug(data): - syslog.syslog(syslog.LOG_DEBUG, data) - if Logger.debugFlag: - print data - - def openlog(): - syslog.openlog('hsc', syslog.LOG_PID, syslog.LOG_LOCAL0) - - def debugEnable(): - Logger.debugFlag = True - - log = staticmethod(log) - debug = staticmethod(debug) - openlog = staticmethod(openlog) - debugEnable = staticmethod(debugEnable) - debugFlag = False - diff --git a/server/params.py b/server/params.py deleted file mode 100644 index dc25bc0..0000000 --- a/server/params.py +++ /dev/null @@ -1,30 +0,0 @@ -from logger import Logger - -class Params(object): - def __init__(self, e): - Logger.log("Params: %s" % str(e)) - for k in e.keys(): - self.__dict__[k] = e[k][0] - - def __getattr__(self, a): - return '' - - def get(self, k): - if self.__dict__.has_key(k): - return self.__dict__[k] - else: - return '' - - def check_existance(self, l): - for i in l: - if not self.__dict__.has_key(i): - raise KeyError, i - - def items(self): - for k in self.__dict__.keys(): - yield (k, self.__dict__[k]) - return - - def __str__(self): - return str(self.__dict__) - diff --git a/server/session.py b/server/session.py deleted file mode 100644 index 319f811..0000000 --- a/server/session.py +++ /dev/null @@ -1,110 +0,0 @@ -import time -import threading -from logger import Logger - - - -class SessionContainer(threading.Thread): - def __init__(self, checkPeriod, expiryTime): - threading.Thread.__init__(self) - self.checkPeriod = checkPeriod - self.expiryTime = expiryTime - self.sessions = {} - self.sessionsLock = threading.Lock() - - def get(self, sid): - if not sid: - return None - try: - self.sessionsLock.acquire() - session = self.sessions[sid] - session.updateTimestamp() - return session - except KeyError: - return None - finally: - self.sessionsLock.release() - - def delete(self, sid): - if sid: - try: - self.sessionsLock.acquire() - del self.sessions[sid] - except KeyError: - pass - finally: - self.sessionsLock.release() - - def add(self, session): - try: - self.sessionsLock.acquire() - self.sessions[session.getId()] = session - finally: - self.sessionsLock.release() - - def run(self): - while True: - try: - self.sessionsLock.acquire() - - currentTime = int(time.time()) - for session in self.sessions.values(): - Logger.log("SessionContainer: checking session %s, expires in %d s" % (session.getId(), - (session.getTimestamp() + self.expiryTime) - currentTime)) - if (session.getTimestamp() + self.expiryTime) < currentTime: - Logger.log("SessionContainer: about to drop session %s" % session.getId()) - del self.sessions[session.getId()] - finally: - self.sessionsLock.release() - - time.sleep(self.checkPeriod) - - -class Session(object): - def __init__(self, id, params): - self.timestamp = int(time.time()) - self.id = id - self.params = params - self.badmsg = '' - self.goodmsg = '' - self.role = '' - - def updateTimestamp(self): - self.timestamp = int(time.time()) - - def getTimestamp(self): - return self.timestamp - - def getId(self): - return self.id - - def setParams(self, params): - self.params = params - - def getParams(self): - return self.params - - def setGoodMsg(self, msg): - self.goodmsg = msg - - def setBadMsg(self, msg): - self.badmsg = msg - - def setRedirectTarget(self, target): - self.redirectTarget = target - - def setShownPage(self, page): - self.page = page - - def getShownPage(self): - return self.page - - def setAuthTuple(self, authTuple): - self.authTuple = authTuple - self.username = authTuple['username'] - self.password = authTuple['password'] - self.role = authTuple['role'] - - def clearMsgs(self): - self.badmsg = '' - self.goodmsg = '' diff --git a/server/templates/admin_menu.inc b/server/templates/admin_menu.inc deleted file mode 100644 index 36e4b0f..0000000 --- a/server/templates/admin_menu.inc +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/server/templates/any_menu.inc b/server/templates/any_menu.inc deleted file mode 100644 index b521cdb..0000000 --- a/server/templates/any_menu.inc +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/server/templates/footer.inc b/server/templates/footer.inc deleted file mode 100644 index 67dd8a0..0000000 --- a/server/templates/footer.inc +++ /dev/null @@ -1,4 +0,0 @@ -

- - - \ No newline at end of file diff --git a/server/templates/header.inc b/server/templates/header.inc deleted file mode 100644 index 1103b79..0000000 --- a/server/templates/header.inc +++ /dev/null @@ -1,42 +0,0 @@ - - - YaDyn - - - - -
- #if $session and $session.goodmsg -

- $session.goodmsg -

- #end if -
- -
- #if $session and $session.badmsg -

- $session.badmsg -

- #end if -
- - - -
-

diff --git a/server/templates/login.tmpl b/server/templates/login.tmpl deleted file mode 100644 index c1b79ff..0000000 --- a/server/templates/login.tmpl +++ /dev/null @@ -1,17 +0,0 @@ -#include "templates/header.inc" - - -

- - - - - - -
Username:
Password:
-
- -
- - -#include "templates/footer.inc" diff --git a/server/templates/logout.tmpl b/server/templates/logout.tmpl deleted file mode 100644 index b023018..0000000 --- a/server/templates/logout.tmpl +++ /dev/null @@ -1 +0,0 @@ -bye diff --git a/server/templates/menu.tmpl b/server/templates/menu.tmpl new file mode 100644 index 0000000..4aa2c58 --- /dev/null +++ b/server/templates/menu.tmpl @@ -0,0 +1,6 @@ +#include "templates/header.inc" + + + +#include "templates/footer.inc" + diff --git a/server/templates/user_menu.inc b/server/templates/user_menu.inc deleted file mode 100644 index 8ce2ee6..0000000 --- a/server/templates/user_menu.inc +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/server/yadyn b/server/yadyn index 2a7094a..cd00b94 100755 --- a/server/yadyn +++ b/server/yadyn @@ -8,7 +8,7 @@ import DynHandler # import DnsHandler import Expirer import DynReceiver -import WebReceiver +import CmdReceiver import Entry import Event @@ -17,13 +17,12 @@ import Event MSG_TIME_CORRIDOR = 5 EVENT_LIFE_TIME = 10 NULL_ADDRESS = '0.0.0.0' -ZONE = 'contextmatters.de' NAME = 'serve' TTL = 120 NAMESERVER = '127.0.0.1' TSIGKEY = { "monitoring." : "HYHN8l/dg1+q6QLOURp2qw==" } PIDFILE = "/tmp/yadyn.pid" - +ADMIN_PWD = 'test123' entries = shelve.open('entries', flag='c', writeback=True) @@ -44,8 +43,10 @@ try: expirer = Expirer.Expirer(entries, EVENT_LIFE_TIME, NULL_ADDRESS) expirer.start() - webReceiver = WebReceiver.WebReceiver(("", 8080), entries) - webReceiver.start() + #webReceiver = WebReceiver.WebReceiver(("", 8080), entries, ADMIN_PWD) + #webReceiver.start() + cmdReceiver = CmdReceiver.CmdReceiver(("", 8023), entries, ADMIN_PWD) + cmdReceiver.start() while True: entries.sync()