]>
Commit | Line | Data |
---|---|---|
51c62214 AM |
1 | #!/usr/bin/python |
2 | ||
c49ac31f | 3 | import socket |
51c62214 AM |
4 | import string |
5 | import cgi | |
6 | import time | |
387d9f05 | 7 | import log |
c87a0ffa | 8 | import ssl |
2825d596 | 9 | import sys |
97d377c9 | 10 | import traceback |
6d31e66e | 11 | import os |
8e837ecd | 12 | from config import config, init_conf |
51c62214 | 13 | |
51c62214 AM |
14 | from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer |
15 | ||
16 | import request_handler | |
6d31e66e | 17 | import path |
51c62214 AM |
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.getheader('content-length')) | |
28 | ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) | |
29 | if ctype != 'application/x-www-form-urlencoded': | |
39950739 | 30 | log.error("request_handler_server: [%s]: 401 Unauthorized" % self.client_address[0]) |
51c62214 AM |
31 | self.send_error(401) |
32 | self.end_headers() | |
33 | return | |
34 | ||
35 | query = self.rfile.read(length) | |
51c62214 | 36 | |
c1ad9456 ER |
37 | filename = self.headers.getheader('x-filename') |
38 | ||
f02c1e4d | 39 | if not request_handler.handle_request_main(query, filename = filename): |
0a33e679 | 40 | error = log.last_log(); |
39950739 | 41 | log.error("request_handler_server: [%s]: handle_request_main(..., %s) failed" % (self.client_address[0], filename)) |
6f69a3b6 | 42 | self.send_error(500, "%s: request failed. %s" % (filename, error)) |
51c62214 AM |
43 | self.end_headers() |
44 | return | |
45 | ||
46 | self.send_response(200) | |
47 | self.end_headers() | |
48 | ||
49 | except Exception, e: | |
0a33e679 | 50 | self.send_error(500, "%s: %s" % (filename, e)) |
51c62214 | 51 | self.end_headers() |
97d377c9 | 52 | log.error("request_handler_server: [%s]: exception: %s\n%s" % (self.client_address[0], e, traceback.format_exc())) |
51c62214 AM |
53 | raise |
54 | pass | |
55 | ||
6d31e66e | 56 | def write_css(): |
ed53f981 | 57 | css_src = os.path.join(os.path.dirname(__file__), 'style.css') |
6d31e66e | 58 | css_file = path.www_dir + "/style.css" |
0d52c382 | 59 | # skip if file exists and code is not newer |
ed53f981 | 60 | if os.path.exists(css_file) and os.stat(css_src).st_mtime < os.stat(css_file).st_mtime: |
6d31e66e ER |
61 | return |
62 | ||
6d31e66e | 63 | old_umask = os.umask(0022) |
ed53f981 | 64 | r = open(css_src, 'r') |
6d31e66e | 65 | f = open(css_file, "w") |
ed53f981 | 66 | f.write(r.read()) |
6d31e66e | 67 | f.close() |
ed53f981 | 68 | r.close() |
6d31e66e ER |
69 | os.umask(old_umask) |
70 | ||
04ce7f54 | 71 | def write_js(): |
ed53f981 ER |
72 | js_src = os.path.join(os.path.dirname(__file__), 'script.js') |
73 | js_file = path.www_dir + '/script.js' | |
04ce7f54 | 74 | # skip if file exists and code is not newer |
ed53f981 | 75 | if os.path.exists(js_file) and os.stat(js_src).st_mtime < os.stat(js_file).st_mtime: |
04ce7f54 ER |
76 | return |
77 | ||
04ce7f54 | 78 | old_umask = os.umask(0022) |
ed53f981 ER |
79 | r = open(js_src, 'r') |
80 | f = open(js_file, 'w') | |
81 | f.write(r.read()) | |
04ce7f54 | 82 | f.close() |
ed53f981 | 83 | r.close() |
04ce7f54 ER |
84 | os.umask(old_umask) |
85 | ||
51c62214 | 86 | def main(): |
6d31e66e | 87 | write_css(); |
04ce7f54 | 88 | write_js(); |
c49ac31f | 89 | socket.setdefaulttimeout(30) |
51c62214 | 90 | try: |
8e837ecd ER |
91 | init_conf() |
92 | host = "" | |
93 | port = config.request_handler_server_port | |
c87a0ffa | 94 | srv_ssl = config.request_handler_server_ssl |
8e837ecd | 95 | |
2825d596 ER |
96 | try: |
97 | server = HTTPServer((host, port), MyHandler) | |
c87a0ffa AM |
98 | if srv_ssl: |
99 | server.socket = ssl.wrap_socket (server.socket, | |
100 | keyfile = config.request_handler_server_ssl_key, | |
101 | certfile = config.request_handler_server_ssl_cert, | |
102 | ca_certs = config.request_handler_server_ssl_cacert, | |
103 | server_side=True) | |
2825d596 | 104 | except Exception, e: |
c87a0ffa AM |
105 | log.notice("request_handler_server: can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e)) |
106 | print >> sys.stderr, "ERROR: Can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e) | |
2825d596 ER |
107 | sys.exit(1) |
108 | ||
c87a0ffa | 109 | log.notice('request_handler_server: started on [%s:%d], ssl=%s...' % (host, port, str(srv_ssl))) |
51c62214 AM |
110 | server.serve_forever() |
111 | except KeyboardInterrupt: | |
3f40dee2 | 112 | log.notice('request_handler_server: ^C received, shutting down server') |
51c62214 AM |
113 | server.socket.close() |
114 | ||
115 | if __name__ == '__main__': | |
116 | main() | |
117 |