comparison mercurial/hgweb/server.py @ 29553:cd3e58862cab

hgweb: pass ui into preparehttpserver Upcoming patches will need the built-in HTTPS server to be more configurable.
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 13 Jul 2016 00:14:50 -0700
parents 33770d2b6cf9
children 121d11814c62
comparison
equal deleted inserted replaced
29552:db26925bdbb0 29553:cd3e58862cab
56 class _httprequesthandler(BaseHTTPServer.BaseHTTPRequestHandler): 56 class _httprequesthandler(BaseHTTPServer.BaseHTTPRequestHandler):
57 57
58 url_scheme = 'http' 58 url_scheme = 'http'
59 59
60 @staticmethod 60 @staticmethod
61 def preparehttpserver(httpserver, ssl_cert): 61 def preparehttpserver(httpserver, ui):
62 """Prepare .socket of new HTTPServer instance""" 62 """Prepare .socket of new HTTPServer instance"""
63 pass 63 pass
64 64
65 def __init__(self, *args, **kargs): 65 def __init__(self, *args, **kargs):
66 self.protocol_version = 'HTTP/1.1' 66 self.protocol_version = 'HTTP/1.1'
220 """HTTPS handler based on Python's ssl module""" 220 """HTTPS handler based on Python's ssl module"""
221 221
222 url_scheme = 'https' 222 url_scheme = 'https'
223 223
224 @staticmethod 224 @staticmethod
225 def preparehttpserver(httpserver, ssl_cert): 225 def preparehttpserver(httpserver, ui):
226 try: 226 try:
227 import ssl 227 import ssl
228 ssl.wrap_socket 228 ssl.wrap_socket
229 except ImportError: 229 except ImportError:
230 raise error.Abort(_("SSL support is unavailable")) 230 raise error.Abort(_("SSL support is unavailable"))
231
232 certfile = ui.config('web', 'certificate')
231 httpserver.socket = ssl.wrap_socket( 233 httpserver.socket = ssl.wrap_socket(
232 httpserver.socket, server_side=True, 234 httpserver.socket, server_side=True,
233 certfile=ssl_cert, ssl_version=ssl.PROTOCOL_TLSv1) 235 certfile=certfile, ssl_version=ssl.PROTOCOL_TLSv1)
234 236
235 def setup(self): 237 def setup(self):
236 self.connection = self.request 238 self.connection = self.request
237 self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) 239 self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
238 self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) 240 self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
262 def __init__(self, ui, app, addr, handler, **kwargs): 264 def __init__(self, ui, app, addr, handler, **kwargs):
263 BaseHTTPServer.HTTPServer.__init__(self, addr, handler, **kwargs) 265 BaseHTTPServer.HTTPServer.__init__(self, addr, handler, **kwargs)
264 self.daemon_threads = True 266 self.daemon_threads = True
265 self.application = app 267 self.application = app
266 268
267 handler.preparehttpserver(self, ui.config('web', 'certificate')) 269 handler.preparehttpserver(self, ui)
268 270
269 prefix = ui.config('web', 'prefix', '') 271 prefix = ui.config('web', 'prefix', '')
270 if prefix: 272 if prefix:
271 prefix = '/' + prefix.strip('/') 273 prefix = '/' + prefix.strip('/')
272 self.prefix = prefix 274 self.prefix = prefix