]> TLD Linux GIT Repositories - tld-builder.git/blob - TLD_Builder/request_handler_server.py
- more python 3.x fixes
[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, HTTPServer
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 write_js():
70     js_src = os.path.join(os.path.dirname(__file__), 'script.js')
71     js_file = path.www_dir + '/script.js'
72     # skip if file exists and code is not newer
73     if os.path.exists(js_file) and os.stat(js_src).st_mtime < os.stat(js_file).st_mtime:
74         return
75
76     old_umask = os.umask(0o0022)
77     r = open(js_src, 'r')
78     f = open(js_file, 'w')
79     f.write(r.read())
80     f.close()
81     r.close()
82     os.umask(old_umask)
83
84 def main(srv_ssl=False):
85     write_css();
86     write_js();
87     socket.setdefaulttimeout(30)
88     try:
89         init_conf()
90         host = ""
91         port = config.request_handler_server_port
92         if srv_ssl:
93             port = config.request_handler_server_ssl_port
94
95         try:
96             server = HTTPServer((host, port), MyHandler)
97             if srv_ssl:
98                 server.socket = ssl.wrap_socket (server.socket,
99                                 keyfile = path.conf_dir + "/" + config.request_handler_server_ssl_key,
100                                 certfile = path.conf_dir + "/" + config.request_handler_server_ssl_cert,
101                                 ca_certs = "/etc/certs/ca-certificates.crt",
102                                 server_side=True)
103         except Exception as e:
104             log.notice("request_handler_server: can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e))
105             print >> sys.stderr, "ERROR: Can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e)
106             sys.exit(1)
107
108         log.notice('request_handler_server: started on [%s:%d], ssl=%s...' % (host, port, str(srv_ssl)))
109         server.serve_forever()
110     except KeyboardInterrupt:
111         log.notice('request_handler_server: ^C received, shutting down server')
112         server.socket.close()
113
114 if __name__ == '__main__':
115     srv_ssl = False
116     if len(sys.argv) == 2 and sys.argv[1] == "ssl":
117         srv_ssl = True
118
119     main(srv_ssl)