]> git.pld-linux.org Git - projects/pld-builder.new.git/blob - PLD_Builder/request_handler_server.py
b0eafbc9d62f95c08c2c6667f848a9fd46662179
[projects/pld-builder.new.git] / PLD_Builder / request_handler_server.py
1 #!/usr/bin/python
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 BaseHTTPServer 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                 filename = "(unknown)"
27                 try:
28                         length = int(self.headers.getheader('content-length'))
29                         ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
30                         if ctype != 'application/x-www-form-urlencoded':
31                                 log.error("request_handler_server: [%s]: 401 Unauthorized" % self.client_address[0])
32                                 self.send_error(401)
33                                 self.end_headers()
34                                 return
35
36                         query = self.rfile.read(length)
37
38                         filename = self.headers.getheader('x-filename')
39
40                         if not request_handler.handle_request_main(query, filename = filename):
41                                 error = log.last_log();
42                                 log.error("request_handler_server: [%s]: handle_request_main(..., %s) failed" % (self.client_address[0], filename))
43                                 self.send_error(500, "%s: request failed. %s" % (filename, error))
44                                 self.end_headers()
45                                 return
46
47                         self.send_response(200)
48                         self.end_headers()
49
50                 except Exception, e:
51                         self.send_error(500, "%s: %s" % (filename, e))
52                         self.end_headers()
53                         log.error("request_handler_server: [%s]: exception: %s\n%s" % (self.client_address[0], e, traceback.format_exc()))
54                         raise
55                         pass
56
57 def write_css():
58         css_src = os.path.join(os.path.dirname(__file__), 'style.css')
59         css_file = path.www_dir + "/style.css"
60         # skip if file exists and code is not newer
61         if os.path.exists(css_file) and os.stat(css_src).st_mtime < os.stat(css_file).st_mtime:
62                 return
63
64         old_umask = os.umask(0022)
65         r = open(css_src, 'r')
66         f = open(css_file, "w")
67         f.write(r.read())
68         f.close()
69         r.close()
70         os.umask(old_umask)
71
72 def write_js():
73         js_src = os.path.join(os.path.dirname(__file__), 'script.js')
74         js_file = path.www_dir + '/script.js'
75         # skip if file exists and code is not newer
76         if os.path.exists(js_file) and os.stat(js_src).st_mtime < os.stat(js_file).st_mtime:
77                 return
78
79         old_umask = os.umask(0022)
80         r = open(js_src, 'r')
81         f = open(js_file, 'w')
82         f.write(r.read())
83         f.close()
84         r.close()
85         os.umask(old_umask)
86
87 def main(srv_ssl=False):
88         write_css();
89         write_js();
90         socket.setdefaulttimeout(30)
91         try:
92                 init_conf()
93                 host = ""
94                 port = config.request_handler_server_port
95                 if srv_ssl:
96                         port = config.request_handler_server_ssl_port
97
98                 try:
99                         server = HTTPServer((host, port), MyHandler)
100                         if srv_ssl:
101                                 server.socket = ssl.wrap_socket (server.socket,
102                                                 keyfile = config.request_handler_server_ssl_key,
103                                                 certfile = config.request_handler_server_ssl_cert,
104                                                 ca_certs = "/etc/certs/ca-certificates.crt",
105                                                 server_side=True)
106                 except Exception, e:
107                         log.notice("request_handler_server: can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e))
108                         print >> sys.stderr, "ERROR: Can't start server on [%s:%d], ssl=%s: %s" % (host, port, str(srv_ssl), e)
109                         sys.exit(1)
110
111                 log.notice('request_handler_server: started on [%s:%d], ssl=%s...' % (host, port, str(srv_ssl)))
112                 server.serve_forever()
113         except KeyboardInterrupt:
114                 log.notice('request_handler_server: ^C received, shutting down server')
115                 server.socket.close()
116
117 if __name__ == '__main__':
118         srv_ssl = False
119         if len(sys.argv) == 2 and sys.argv[1] == "ssl":
120                 srv_ssl = True
121
122         main(srv_ssl)
123
This page took 0.046836 seconds and 3 git commands to generate.