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