]> TLD Linux GIT Repositories - tld-builder.git/blob - TLD_Builder/request_handler_server.py
- show full time and date in HTML queue, drop filtering by requester
[tld-builder.git] / TLD_Builder / request_handler_server.py
1 #!/usr/bin/python3
2
3 import socket
4 import string
5 import cgi
6 import time
7 import log
8 import ssl
9 import sys
10 import traceback
11 import os
12 from config import config, init_conf
13
14 from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
15
16 import request_handler
17 import path
18
19 class MyHandler(BaseHTTPRequestHandler):
20
21     def do_GET(self):
22         self.send_error(401);
23
24     def do_POST(self):
25         global rootnode
26         try:
27             length = int(self.headers.get('content-length'))
28             filename = self.headers.get('x-filename')
29             if not length:
30                 log.error("request_handler_server: [%s]: 401 Unauthorized" % self.client_address[0])
31                 self.send_error(401)
32                 self.end_headers()
33                 return
34
35             query = self.rfile.read(length)
36
37             if not request_handler.handle_request_main(query, filename = filename):
38                 error = log.last_log();
39                 log.error("request_handler_server: [%s]: handle_request_main(..., %s) failed" % (self.client_address[0], filename))
40                 self.send_error(500, "%s: request failed. %s" % (filename, error))
41                 self.end_headers()
42                 return
43
44             self.send_response(200)
45             self.end_headers()
46
47         except Exception as e:
48             self.send_error(500, "%s: %s" % (filename, e))
49             self.end_headers()
50             log.error("request_handler_server: [%s]: exception: %s\n%s" % (self.client_address[0], e, traceback.format_exc()))
51             raise
52             pass
53
54 def write_css():
55     css_src = os.path.join(os.path.dirname(__file__), 'style.css')
56     css_file = path.www_dir + "/style.css"
57     # skip if file exists and code is not newer
58     if os.path.exists(css_file) and os.stat(css_src).st_mtime < os.stat(css_file).st_mtime:
59         return
60
61     old_umask = os.umask(0o0022)
62     r = open(css_src, 'r')
63     f = open(css_file, "w")
64     f.write(r.read())
65     f.close()
66     r.close()
67     os.umask(old_umask)
68
69 def main(srv_ssl=False):
70     write_css();
71     socket.setdefaulttimeout(30)
72     try:
73         init_conf()
74         host = ""
75         port = config.request_handler_server_port
76         if srv_ssl:
77             port = config.request_handler_server_ssl_port
78
79         try:
80             server = ThreadingHTTPServer((host, port), MyHandler)
81             if srv_ssl:
82                 server.socket = ssl.wrap_socket (server.socket,
83                                 keyfile = path.conf_dir + "/" + config.request_handler_server_ssl_key,
84                                 certfile = path.conf_dir + "/" + config.request_handler_server_ssl_cert,
85                                 ca_certs = "/etc/certs/ca-certificates.crt",
86                                 server_side=True)
87         except Exception as e:
88             log.notice("request_handler_server: can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e))
89             print >> sys.stderr, "ERROR: Can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e)
90             sys.exit(1)
91
92         log.notice('request_handler_server: started on [%s:%d], ssl=%s...' % (host, port, str(srv_ssl)))
93         server.serve_forever()
94     except KeyboardInterrupt:
95         log.notice('request_handler_server: ^C received, shutting down server')
96         server.socket.close()
97
98 if __name__ == '__main__':
99     srv_ssl = False
100     if len(sys.argv) == 2 and sys.argv[1] == "ssl":
101         srv_ssl = True
102
103     main(srv_ssl)