X-Git-Url: https://git.tld-linux.org/?a=blobdiff_plain;ds=sidebyside;f=pld-builder.new%2FPLD_Builder%2Frequest_handler_server.py;fp=pld-builder.new%2FPLD_Builder%2Frequest_handler_server.py;h=5c591f0f22c04f4c618153f47d69bf3bf707cec3;hb=90809c8fec988489786ce00247d9a4150070748b;hp=0000000000000000000000000000000000000000;hpb=ab3934fab858112cd552359b18cb980ea07c310b;p=TLD.git diff --git a/pld-builder.new/PLD_Builder/request_handler_server.py b/pld-builder.new/PLD_Builder/request_handler_server.py new file mode 100644 index 0000000..5c591f0 --- /dev/null +++ b/pld-builder.new/PLD_Builder/request_handler_server.py @@ -0,0 +1,192 @@ +#!/usr/bin/python + +import socket +import string +import cgi +import time +import log +import sys +import traceback +import os +from config import config, init_conf + +from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer + +import request_handler +import path + +class MyHandler(BaseHTTPRequestHandler): + + def do_GET(self): + self.send_error(401); + + def do_POST(self): + global rootnode + try: + length = int(self.headers.getheader('content-length')) + ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) + if ctype != 'application/x-www-form-urlencoded': + log.error("request_handler_server: [%s]: 401 Unauthorized" % self.client_address[0]) + self.send_error(401) + self.end_headers() + return + + query = self.rfile.read(length) + + filename = self.headers.getheader('x-filename') + + if not request_handler.handle_request_main(query, filename = filename): + error = log.last_log(); + log.error("request_handler_server: [%s]: handle_request_main(..., %s) failed" % (self.client_address[0], filename)) + self.send_error(500, "%s: request failed. %s" % (filename, error)) + self.end_headers() + return + + self.send_response(200) + self.end_headers() + + except Exception, e: + self.send_error(500, "%s: %s" % (filename, e)) + self.end_headers() + log.error("request_handler_server: [%s]: exception: %s\n%s" % (self.client_address[0], e, traceback.format_exc())) + raise + pass + +def write_css(): + css_file = path.www_dir + "/style.css" + # skip if file exists and code is not newer + if os.path.exists(css_file) and os.stat(__file__).st_mtime < os.stat(css_file).st_mtime: + return + + # css from www.pld-linux.org wiki theme, using css usage firebug plugin to cleanup + css = """ +html { + background-color: white; + color: #5e5e5e; + font-family: Tahoma, Arial, Lucida Grande, sans-serif; + font-size: 0.75em; + line-height: 1.25em; +} + +a { + text-decoration: underline; + color: #006; +} + +a:hover { + color: #006; +} + +pre { + background: #FFF8EB; + border: 1pt solid #FFE2AB; + font-family: courier, monospace; + padding: 0.5em; + white-space: pre-wrap; + word-wrap: break-word; +} + +@media screen, projection { + html { + background-color: #f3efe3; + } + + body { + position: relative; + } + + div { + background-color: white; + margin: 10px 0px; + padding: 2px; + } + div > a { + font-weight: bold; + color: #5e5e5e; + } + div > a:hover { + color: #5e5e5e; + } + div.upgrade { + background-color: #e4f1cf; + } + div:target { + background-color: #ffffcc; + color: black; + } +} +@media print { + a { + background-color: inherit; + color: inherit; + } +} + +@media projection { + html { line-height: 1.8em; } + body, b, a, p { font-size: 22pt; } +} +""" + old_umask = os.umask(0022) + f = open(css_file, "w") + f.write(css) + f.close() + os.umask(old_umask) + +def write_js(): + js_file = path.www_dir + "/script.js" + # skip if file exists and code is not newer + if os.path.exists(js_file) and os.stat(__file__).st_mtime < os.stat(js_file).st_mtime: + return + + js = """ +// update date stamps to reflect viewers timezone +function update_tz(t) { + var el, off, dt, + collection = document.getElementsByTagName('span'); + for (off in collection) { + el = collection[off]; + if (el.id == 'tz') { + dt = new Date(el.innerHTML).toString(); + // strip timezone name, it is usually wrong when not initialized + // from TZ env, but reverse calculated from os data + dt = dt.replace(/\s+\(.+\)/, ""); + // strip "GMT" + dt = dt.replace(/GMT/, ""); + el.innerHTML = dt; + } + } +} +window.onload = update_tz; +""" + old_umask = os.umask(0022) + f = open(js_file, "w") + f.write(js) + f.close() + os.umask(old_umask) + +def main(): + write_css(); + write_js(); + socket.setdefaulttimeout(30) + try: + init_conf() + host = "" + port = config.request_handler_server_port + + try: + server = HTTPServer((host, port), MyHandler) + except Exception, e: + log.notice("request_handler_server: can't start server on [%s:%d]: %s" % (host, port, e)) + print >> sys.stderr, "ERROR: Can't start server on [%s:%d]: %s" % (host, port, e) + sys.exit(1) + + log.notice('request_handler_server: started on [%s:%d]...' % (host, port)) + server.serve_forever() + except KeyboardInterrupt: + log.notice('request_handler_server: ^C received, shutting down server') + server.socket.close() + +if __name__ == '__main__': + main() +