cli instead of web
This commit is contained in:
parent
261b60d003
commit
4686523707
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):
|
||||
@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()
|
||||
|
||||
|
@ -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 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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user