cli instead of web
This commit is contained in:
48
server/CmdReceiver.py
Normal file
48
server/CmdReceiver.py
Normal file
@ -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()
|
||||||
|
|
@ -18,8 +18,10 @@ TEMPLATE_DIR='./templates'
|
|||||||
|
|
||||||
class YaDynWebApp(object):
|
class YaDynWebApp(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setSessionContainer(cls, sessionContainer):
|
def setClassParams(cls, sessionContainer, adminPwd, entries):
|
||||||
cls.sessionContainer = sessionContainer
|
cls.sessionContainer = sessionContainer
|
||||||
|
cls.adminPwd = adminPwd
|
||||||
|
cls.entries = entries
|
||||||
|
|
||||||
def __init__(self, sid):
|
def __init__(self, sid):
|
||||||
self.buf = StringIO.StringIO()
|
self.buf = StringIO.StringIO()
|
||||||
@ -88,7 +90,7 @@ class YaDynWebApp(object):
|
|||||||
|
|
||||||
def processAction(self):
|
def processAction(self):
|
||||||
if self.params.action == "Login":
|
if self.params.action == "Login":
|
||||||
authTuple = getAuthTuple(self.params.username, self.params.password)
|
authTuple = self.getAuthTuple(self.params.username, self.params.password)
|
||||||
if authTuple:
|
if authTuple:
|
||||||
self.params = Params({})
|
self.params = Params({})
|
||||||
self.sid = str(uuid.uuid1())
|
self.sid = str(uuid.uuid1())
|
||||||
@ -131,13 +133,16 @@ class YaDynWebApp(object):
|
|||||||
return self.buf.getvalue()
|
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):
|
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||||
server_version = "YaDynWebAppHTTP/1.0"
|
server_version = "YaDynWebAppHTTP/1.0"
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setParams(cls, entries):
|
|
||||||
cls.entries = entries
|
|
||||||
|
|
||||||
def log_message(self, format, *args):
|
def log_message(self, format, *args):
|
||||||
Logger.log(format%args)
|
Logger.log(format%args)
|
||||||
|
|
||||||
@ -206,17 +211,18 @@ class MyServer(SocketServer.ThreadingTCPServer):
|
|||||||
|
|
||||||
|
|
||||||
class WebReceiver(threading.Thread):
|
class WebReceiver(threading.Thread):
|
||||||
def __init__(self, webAddr, entries):
|
def __init__(self, webAddr, entries, adminPwd):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
self.webAddr = webAddr
|
self.webAddr = webAddr
|
||||||
MyHandler.setParams(entries)
|
self.entries = entries
|
||||||
|
self.adminPwd = adminPwd
|
||||||
self.setDaemon(True)
|
self.setDaemon(True)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.sessionContainer = SessionContainer(60, 600)
|
self.sessionContainer = SessionContainer(60, 600)
|
||||||
self.sessionContainer.setDaemon(True)
|
self.sessionContainer.setDaemon(True)
|
||||||
self.sessionContainer.start()
|
self.sessionContainer.start()
|
||||||
YaDynWebApp.setSessionContainer(self.sessionContainer)
|
YaDynWebApp.setClassParams(self.sessionContainer, self.adminPwd, self.entries)
|
||||||
|
|
||||||
MyServer(self.webAddr, MyHandler).serve_forever()
|
MyServer(self.webAddr, MyHandler).serve_forever()
|
||||||
|
|
||||||
|
@ -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
|
|
||||||
|
|
@ -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__)
|
|
||||||
|
|
@ -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 = ''
|
|
@ -1,3 +0,0 @@
|
|||||||
<ul>
|
|
||||||
<li><a href="/person">Person</a></li>
|
|
||||||
</ul>
|
|
@ -1,4 +0,0 @@
|
|||||||
<ul>
|
|
||||||
<li><a href="/change_password">Change password</a></li>
|
|
||||||
<li><a href="/logout">Logout</a></li>
|
|
||||||
</ul>
|
|
@ -1,4 +0,0 @@
|
|||||||
</p>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,42 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>YaDyn</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="head">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="goodmsg">
|
|
||||||
#if $session and $session.goodmsg
|
|
||||||
<p>
|
|
||||||
<font color="green">$session.goodmsg</font>
|
|
||||||
</p>
|
|
||||||
#end if
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="badmsg">
|
|
||||||
#if $session and $session.badmsg
|
|
||||||
<p>
|
|
||||||
<font color="red">$session.badmsg</font>
|
|
||||||
</p>
|
|
||||||
#end if
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="menu">
|
|
||||||
<p>
|
|
||||||
#if $session
|
|
||||||
#include "templates/any_menu.inc"
|
|
||||||
#end if
|
|
||||||
|
|
||||||
#if $session and $session.role == "user"
|
|
||||||
#include "templates/user_menu.inc"
|
|
||||||
#end if
|
|
||||||
|
|
||||||
#if $session and $session.role == "admin"
|
|
||||||
#include "templates/admin_menu.inc"
|
|
||||||
#end if
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
<p>
|
|
@ -1,17 +0,0 @@
|
|||||||
#include "templates/header.inc"
|
|
||||||
|
|
||||||
|
|
||||||
<form method="POST">
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Username:</td><td><input type="text" name="username" value=""/></td>
|
|
||||||
</tr><tr>
|
|
||||||
<td>Password:</td><td><input type="password" name="password" value=""/></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br/>
|
|
||||||
<input type="submit" name="action" value="Login"/>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
|
|
||||||
#include "templates/footer.inc"
|
|
@ -1 +0,0 @@
|
|||||||
bye
|
|
6
server/templates/menu.tmpl
Normal file
6
server/templates/menu.tmpl
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "templates/header.inc"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "templates/footer.inc"
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
<ul>
|
|
||||||
<li><a href="/personal_statistics">View your personal statistics</a></li>
|
|
||||||
</ul>
|
|
11
server/yadyn
11
server/yadyn
@ -8,7 +8,7 @@ import DynHandler
|
|||||||
# import DnsHandler
|
# import DnsHandler
|
||||||
import Expirer
|
import Expirer
|
||||||
import DynReceiver
|
import DynReceiver
|
||||||
import WebReceiver
|
import CmdReceiver
|
||||||
import Entry
|
import Entry
|
||||||
import Event
|
import Event
|
||||||
|
|
||||||
@ -17,13 +17,12 @@ import Event
|
|||||||
MSG_TIME_CORRIDOR = 5
|
MSG_TIME_CORRIDOR = 5
|
||||||
EVENT_LIFE_TIME = 10
|
EVENT_LIFE_TIME = 10
|
||||||
NULL_ADDRESS = '0.0.0.0'
|
NULL_ADDRESS = '0.0.0.0'
|
||||||
ZONE = 'contextmatters.de'
|
|
||||||
NAME = 'serve'
|
NAME = 'serve'
|
||||||
TTL = 120
|
TTL = 120
|
||||||
NAMESERVER = '127.0.0.1'
|
NAMESERVER = '127.0.0.1'
|
||||||
TSIGKEY = { "monitoring." : "HYHN8l/dg1+q6QLOURp2qw==" }
|
TSIGKEY = { "monitoring." : "HYHN8l/dg1+q6QLOURp2qw==" }
|
||||||
PIDFILE = "/tmp/yadyn.pid"
|
PIDFILE = "/tmp/yadyn.pid"
|
||||||
|
ADMIN_PWD = 'test123'
|
||||||
|
|
||||||
|
|
||||||
entries = shelve.open('entries', flag='c', writeback=True)
|
entries = shelve.open('entries', flag='c', writeback=True)
|
||||||
@ -44,8 +43,10 @@ try:
|
|||||||
expirer = Expirer.Expirer(entries, EVENT_LIFE_TIME, NULL_ADDRESS)
|
expirer = Expirer.Expirer(entries, EVENT_LIFE_TIME, NULL_ADDRESS)
|
||||||
expirer.start()
|
expirer.start()
|
||||||
|
|
||||||
webReceiver = WebReceiver.WebReceiver(("", 8080), entries)
|
#webReceiver = WebReceiver.WebReceiver(("", 8080), entries, ADMIN_PWD)
|
||||||
webReceiver.start()
|
#webReceiver.start()
|
||||||
|
cmdReceiver = CmdReceiver.CmdReceiver(("", 8023), entries, ADMIN_PWD)
|
||||||
|
cmdReceiver.start()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
entries.sync()
|
entries.sync()
|
||||||
|
Reference in New Issue
Block a user