From b0611b52c03fadfe55acea60b15d7e28cb23d23a Mon Sep 17 00:00:00 2001 From: who Date: Mon, 12 Nov 2007 14:53:08 +0100 Subject: [PATCH] drop --- server/WebReceiver.py | 228 ------------------------------------------ 1 file changed, 228 deletions(-) delete mode 100644 server/WebReceiver.py diff --git a/server/WebReceiver.py b/server/WebReceiver.py deleted file mode 100644 index 92c4aa9..0000000 --- a/server/WebReceiver.py +++ /dev/null @@ -1,228 +0,0 @@ -from params import Params -from session import Session, SessionContainer -import BaseHTTPServer -import Cheetah.Template -import Cookie -import SocketServer -import StringIO -import cgi -import sys -import uuid -import os -import threading -from logger import Logger - - -TEMPLATE_DIR='./templates' - - -class YaDynWebApp(object): - @classmethod - def setClassParams(cls, sessionContainer, adminPwd, entries): - cls.sessionContainer = sessionContainer - cls.adminPwd = adminPwd - cls.entries = entries - - def __init__(self, sid): - self.buf = StringIO.StringIO() - self.params = None - self.session = YaDynWebApp.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': - YaDynWebApp.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=TEMPLATE_DIR + '/' + templateFile, - searchList=[self]) - #self.log("OUTPUT: %s" % str(tmpl)) - self.buf.write(str(tmpl)) - - if self.session: - self.session.clearMsgs() - except Exception, e: - YaDynWebApp.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 = self.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") - YaDynWebApp.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() - - - 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" - - def log_message(self, format, *args): - Logger.log(format%args) - - def getSidFromCookie(self): - try: - cookie = Cookie.SimpleCookie(self.headers.get('Cookie')) - sid = cookie['sid'].value - except KeyError: - sid = None - return sid - - def setSidInCookie(self, sid): - cookie = Cookie.SimpleCookie() - cookie['sid'] = sid - cookie['sid']['Max-Age'] = 10*60 - self.wfile.write(str(cookie) + '\r\n') - - - - def do_POST(self): - self.log_message("Request: %s", self.path) - sid = self.getSidFromCookie() - self.log_message("Cookie: %s" % self.headers.get('Cookie')) - - d = YaDynWebApp(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): - self.log_message("Request: %s", self.path) - sid = self.getSidFromCookie() - self.log_message("SID: %s" % sid) - - d = YaDynWebApp(sid) - - d.showPage(self.path.split('/')[1]) - - self.send_response(200, "OK") - - self.send_header("Content-Type", "text/html") - self.end_headers() - self.wfile.write(str(d)) - - d.finish() - - - -class MyServer(SocketServer.ThreadingTCPServer): - def __init__(self, server_address, RequestHandlerClass): - self.allow_reuse_address = True - SocketServer.ThreadingTCPServer.__init__(self, server_address, RequestHandlerClass) - - - -class WebReceiver(threading.Thread): - def __init__(self, webAddr, entries, adminPwd): - threading.Thread.__init__(self) - self.webAddr = webAddr - 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.setClassParams(self.sessionContainer, self.adminPwd, self.entries) - - MyServer(self.webAddr, MyHandler).serve_forever() -