11 from config import config, init_conf
13 from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
15 import request_handler
18 class MyHandler(BaseHTTPRequestHandler):
26 length = int(self.headers.get('content-length'))
27 filename = self.headers.get('x-filename')
29 log.error("request_handler_server: [%s]: 401 Unauthorized" % self.client_address[0])
34 query = self.rfile.read(length)
36 if not request_handler.handle_request_main(query, filename = filename):
37 error = log.last_log();
38 log.error("request_handler_server: [%s]: handle_request_main(..., %s) failed" % (self.client_address[0], filename))
39 self.send_error(500, "%s: request failed. %s" % (filename, error))
43 self.send_response(200)
46 except Exception as e:
47 self.send_error(500, "%s: %s" % (filename, e))
49 log.error("request_handler_server: [%s]: exception: %s\n%s" % (self.client_address[0], e, traceback.format_exc()))
54 css_src = os.path.join(os.path.dirname(__file__), 'style.css')
55 css_file = path.www_dir + "/style.css"
56 # skip if file exists and code is not newer
57 if os.path.exists(css_file) and os.stat(css_src).st_mtime < os.stat(css_file).st_mtime:
60 old_umask = os.umask(0o0022)
61 r = open(css_src, 'r')
62 f = open(css_file, "w")
68 def main(srv_ssl=False):
70 socket.setdefaulttimeout(30)
74 port = config.request_handler_server_port
76 port = config.request_handler_server_ssl_port
79 server = ThreadingHTTPServer((host, port), MyHandler)
81 context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
82 context.load_cert_chain(certfile=path.conf_dir + "/" + config.request_handler_server_ssl_cert,
83 keyfile=path.conf_dir + "/" + config.request_handler_server_ssl_key)
84 context.load_verify_locations(cafile="/etc/certs/ca-certificates.crt")
85 server.socket = context.wrap_socket(server.socket, server_side=True)
86 except Exception as e:
87 log.notice("request_handler_server: can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e))
88 print >> sys.stderr, "ERROR: Can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e)
91 log.notice('request_handler_server: started on [%s:%d], ssl=%s...' % (host, port, str(srv_ssl)))
92 server.serve_forever()
93 except KeyboardInterrupt:
94 log.notice('request_handler_server: ^C received, shutting down server')
97 if __name__ == '__main__':
99 if len(sys.argv) == 2 and sys.argv[1] == "ssl":