changes
This commit is contained in:
@ -1,275 +1,76 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
from change_password import change_password #@UnusedImport
|
|
||||||
from db_helper import Db, getAuthTuple
|
|
||||||
from hscException import HscException
|
|
||||||
from loader_personal_statistics import loader_personal_statistics #@UnusedImport
|
|
||||||
from logger import Logger
|
|
||||||
from mandant import add_mandant, loader_change_mandant, change_mandant, change_mandant2, delete_really #@UnusedImport
|
|
||||||
from params import Params
|
|
||||||
from person import person #@UnusedImport
|
|
||||||
from session import Session, SessionContainer
|
|
||||||
|
|
||||||
import BaseHTTPServer
|
import BaseHTTPServer
|
||||||
import Cheetah.Template
|
#import Cheetah.Template
|
||||||
import Cookie
|
|
||||||
import SocketServer
|
import SocketServer
|
||||||
import StringIO
|
#import cgi
|
||||||
import cgi
|
import threading
|
||||||
import getopt
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pidfile_name = "/tmp/hsc.pid"
|
|
||||||
foreGround = False
|
|
||||||
templateDir = "./templates"
|
|
||||||
port = 8000
|
|
||||||
DSN = "host=127.0.0.1 dbname=radius user=webapp password=webapp123"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class HscWebApp(object):
|
|
||||||
def __init__(self, sid):
|
|
||||||
self.buf = StringIO.StringIO()
|
|
||||||
self.params = None
|
|
||||||
self.session = sessionContainer.get(sid)
|
|
||||||
self.error_msg = None
|
|
||||||
self.msg = None
|
|
||||||
self.sid = sid
|
|
||||||
|
|
||||||
def finish(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def log(self, msg):
|
|
||||||
Logger.log(msg)
|
|
||||||
|
|
||||||
def setParams(self, p):
|
|
||||||
self.params = p
|
|
||||||
|
|
||||||
def showPage(self, forcePage=''):
|
|
||||||
if self.session:
|
|
||||||
if forcePage != '':
|
|
||||||
page = forcePage
|
|
||||||
else:
|
|
||||||
page = self.session.redirectTarget
|
|
||||||
else:
|
|
||||||
page = 'login'
|
|
||||||
|
|
||||||
if page == 'logout':
|
|
||||||
sessionContainer.delete(self.sid)
|
|
||||||
self.session = None
|
|
||||||
page = 'login'
|
|
||||||
|
|
||||||
templateFile = page + '.tmpl'
|
|
||||||
|
|
||||||
try:
|
|
||||||
if self.session:
|
|
||||||
self.log("showPage, session: %s" % str(self.session))
|
|
||||||
self.log("showPage, params: %s" % str(self.session.params))
|
|
||||||
self.session.setShownPage(page)
|
|
||||||
|
|
||||||
try:
|
|
||||||
loaderObjectClass = eval("loader_" + page)
|
|
||||||
loaderObject = loaderObjectClass(self.session)
|
|
||||||
loaderObject.mergeAdditionalData()
|
|
||||||
except NameError, e:
|
|
||||||
self.log("loader class for %s not found: %s" % (page, str(e)))
|
|
||||||
except HscException, e:
|
|
||||||
s = "HSC Failure loading data: %s" % str(e)
|
|
||||||
self.log(s)
|
|
||||||
raise Exception(s)
|
|
||||||
|
|
||||||
tmpl = Cheetah.Template.Template(file=templateDir + '/' + templateFile,
|
|
||||||
searchList=[self])
|
|
||||||
#self.log("OUTPUT: %s" % str(tmpl))
|
|
||||||
self.buf.write(str(tmpl))
|
|
||||||
|
|
||||||
if self.session:
|
|
||||||
self.session.clearMsgs()
|
|
||||||
except Exception, e:
|
|
||||||
sessionContainer.delete(self.sid)
|
|
||||||
self.buf.write("Problems to show this page: %s %s" % (e.__class__.__name__, str(e)))
|
|
||||||
finally:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def processAction(self):
|
|
||||||
if self.params.action == "Login":
|
|
||||||
authTuple = getAuthTuple(self.params.username, self.params.password)
|
|
||||||
if authTuple:
|
|
||||||
self.params = Params({})
|
|
||||||
self.sid = str(uuid.uuid1())
|
|
||||||
session = Session(self.sid, self.params)
|
|
||||||
|
|
||||||
session.setAuthTuple(authTuple)
|
|
||||||
session.setGoodMsg("Welcome")
|
|
||||||
session.setRedirectTarget("menu")
|
|
||||||
sessionContainer.add(session)
|
|
||||||
else:
|
|
||||||
self.sid = 0
|
|
||||||
else:
|
|
||||||
if self.session == None:
|
|
||||||
self.sid = 0
|
|
||||||
else:
|
|
||||||
shownPage = self.session.getShownPage()
|
|
||||||
self.session.setParams(self.params)
|
|
||||||
self.log("shownPage: %s" % shownPage)
|
|
||||||
try:
|
|
||||||
dataObjectClass = eval(shownPage)
|
|
||||||
dataObject = dataObjectClass(self.session)
|
|
||||||
dataObject.process()
|
|
||||||
self.session.setGoodMsg("Action on %s performed successfully" % shownPage)
|
|
||||||
self.session.setRedirectTarget(dataObject.getNextPage())
|
|
||||||
except NameError, e:
|
|
||||||
self.log("processAction, NameError PARAMS: %s" % str(self.session.params))
|
|
||||||
s = "Internal program error: %s" % str(e)
|
|
||||||
self.session.setBadMsg(s)
|
|
||||||
self.log(s)
|
|
||||||
self.session.setRedirectTarget("menu")
|
|
||||||
except HscException, e:
|
|
||||||
self.log("processAction, HscException PARAMS: %s" % str(self.session.params))
|
|
||||||
s = "HSC Failure: %s" % str(e)
|
|
||||||
self.session.setBadMsg(s)
|
|
||||||
self.log(s)
|
|
||||||
self.session.setRedirectTarget(shownPage)
|
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.buf.getvalue()
|
|
||||||
|
|
||||||
|
|
||||||
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||||
server_version = "MyHscWebAppHTTP/1.0"
|
server_version = "yadynHTTP/1.0"
|
||||||
|
|
||||||
def log_message(self, format, *args):
|
@classmethod
|
||||||
Logger.log(format%args)
|
def setParams(cls, entries):
|
||||||
|
cls.entries = entries
|
||||||
|
|
||||||
def getSidFromCookie(self):
|
# def do_POST(self):
|
||||||
try:
|
# self.log_message("Request: %s", self.path)
|
||||||
cookie = Cookie.SimpleCookie(self.headers.get('Cookie'))
|
# sid = self.getSidFromCookie()
|
||||||
sid = cookie['sid'].value
|
# self.log_message("Cookie: %s" % self.headers.get('Cookie'))
|
||||||
except KeyError:
|
#
|
||||||
sid = None
|
# d = HscWebApp(sid)
|
||||||
return sid
|
#
|
||||||
|
# l = int(self.headers.get('Content-Length', '0'))
|
||||||
def setSidInCookie(self, sid):
|
# q = self.rfile.read(l)
|
||||||
cookie = Cookie.SimpleCookie()
|
# e = cgi.parse_qs(q)
|
||||||
cookie['sid'] = sid
|
# self.log_message("QUERY: %s" % str(e))
|
||||||
cookie['sid']['Max-Age'] = 10*60
|
# d.setParams(Params(e))
|
||||||
self.wfile.write(str(cookie) + '\r\n')
|
#
|
||||||
|
# d.processAction()
|
||||||
|
#
|
||||||
|
# self.send_response(303, "See Other")
|
||||||
def do_POST(self):
|
# self.setSidInCookie(d.sid)
|
||||||
self.log_message("Request: %s", self.path)
|
# self.send_header("Location", "/")
|
||||||
sid = self.getSidFromCookie()
|
# self.end_headers()
|
||||||
self.log_message("Cookie: %s" % self.headers.get('Cookie'))
|
#
|
||||||
|
# d.finish()
|
||||||
d = HscWebApp(sid)
|
|
||||||
|
|
||||||
l = int(self.headers.get('Content-Length', '0'))
|
|
||||||
q = self.rfile.read(l)
|
|
||||||
e = cgi.parse_qs(q)
|
|
||||||
self.log_message("QUERY: %s" % str(e))
|
|
||||||
d.setParams(Params(e))
|
|
||||||
|
|
||||||
d.processAction()
|
|
||||||
|
|
||||||
self.send_response(303, "See Other")
|
|
||||||
self.setSidInCookie(d.sid)
|
|
||||||
self.send_header("Location", "/")
|
|
||||||
self.end_headers()
|
|
||||||
|
|
||||||
d.finish()
|
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
self.log_message("Request: %s", self.path)
|
self.log_message("Request: %s", self.path)
|
||||||
sid = self.getSidFromCookie()
|
cmd = self.path.split('/')[1]
|
||||||
self.log_message("SID: %s" % sid)
|
dynid = self.path.split('/')[2]
|
||||||
|
|
||||||
d = HscWebApp(sid)
|
d = ''
|
||||||
|
if cmd == 'status':
|
||||||
d.showPage(self.path.split('/')[1])
|
if dynid == 'all':
|
||||||
|
for entry in self.entries.values():
|
||||||
|
d += str(entry) + '\n'
|
||||||
|
elif self.entries.has_key(dynid):
|
||||||
|
d = str(self.entries[dynid])
|
||||||
|
else:
|
||||||
|
d = "unknown dynid"
|
||||||
|
else:
|
||||||
|
d = "unknown cmd"
|
||||||
|
|
||||||
self.send_response(200, "OK")
|
self.send_response(200, "OK")
|
||||||
|
|
||||||
self.send_header("Content-Type", "text/html")
|
self.send_header("Content-Type", "text/plain")
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.wfile.write(str(d))
|
self.wfile.write(str(d))
|
||||||
|
|
||||||
d.finish()
|
|
||||||
|
|
||||||
|
class WebServer(SocketServer.ThreadingTCPServer):
|
||||||
|
|
||||||
class MyServer(SocketServer.ThreadingTCPServer):
|
|
||||||
def __init__(self, server_address, RequestHandlerClass):
|
def __init__(self, server_address, RequestHandlerClass):
|
||||||
self.allow_reuse_address = True
|
self.allow_reuse_address = True
|
||||||
SocketServer.ThreadingTCPServer.__init__(self, server_address, RequestHandlerClass)
|
SocketServer.ThreadingTCPServer.__init__(self, server_address, RequestHandlerClass)
|
||||||
|
|
||||||
|
|
||||||
|
class WebHandler(threading.Thread):
|
||||||
|
def __init__(self, webAddr, entries):
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.webAddr = webAddr
|
||||||
|
MyHandler.setParams(entries)
|
||||||
|
self.setDaemon(True)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
WebServer(self.webAddr, MyHandler).serve_forever()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def usage():
|
|
||||||
print "Usage"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Logger.openlog()
|
|
||||||
|
|
||||||
try:
|
|
||||||
opts, args = getopt.getopt(sys.argv[1:], "hp:dFD:", ["help", "port=", "debug" "ForeGround", "DSN="])
|
|
||||||
except getopt.GetoptError:
|
|
||||||
usage()
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
|
|
||||||
for o, a in opts:
|
|
||||||
if o in ("-h", "--help"):
|
|
||||||
usage()
|
|
||||||
sys.exit()
|
|
||||||
if o in ("-F", "--ForeGround"):
|
|
||||||
foreGround = True
|
|
||||||
if o in ("-p", "--port"):
|
|
||||||
port = int(a)
|
|
||||||
if o in ("-d", "--debug"):
|
|
||||||
foreGround = True
|
|
||||||
Logger.debugEnable()
|
|
||||||
if o in ("-D", "--DSN"):
|
|
||||||
DSN=a
|
|
||||||
|
|
||||||
Db.setDSN(DSN)
|
|
||||||
|
|
||||||
if foreGround:
|
|
||||||
pid = 0
|
|
||||||
else:
|
|
||||||
pid = os.fork()
|
|
||||||
|
|
||||||
|
|
||||||
if pid:
|
|
||||||
pidFile = file(pidfile_name, mode='w')
|
|
||||||
pidFile.write("%i\n" % pid)
|
|
||||||
pidFile.close()
|
|
||||||
print "daemon started with pid ", pid
|
|
||||||
sys.exit(0)
|
|
||||||
else:
|
|
||||||
Logger.log("Daemon started")
|
|
||||||
|
|
||||||
sessionContainer = SessionContainer(60, 600)
|
|
||||||
sessionContainer.setDaemon(True)
|
|
||||||
sessionContainer.start()
|
|
||||||
|
|
||||||
MyServer(('', port), MyHandler).serve_forever()
|
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import DynHandler
|
|||||||
# import DnsHandler
|
# import DnsHandler
|
||||||
import Expirer
|
import Expirer
|
||||||
import DynReceiver
|
import DynReceiver
|
||||||
|
import WebHandler
|
||||||
import Entry
|
import Entry
|
||||||
import Event
|
import Event
|
||||||
|
|
||||||
@ -43,6 +44,9 @@ try:
|
|||||||
expirer = Expirer.Expirer(entries, EVENT_LIFE_TIME, NULL_ADDRESS)
|
expirer = Expirer.Expirer(entries, EVENT_LIFE_TIME, NULL_ADDRESS)
|
||||||
expirer.start()
|
expirer.start()
|
||||||
|
|
||||||
|
webHandler = WebHandler.WebHandler(("", 8080), entries)
|
||||||
|
webHandler.start()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
entries.sync()
|
entries.sync()
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
|
Reference in New Issue
Block a user