main.py (1839B)
1 import logging 2 import tornado.web 3 import tornado.ioloop 4 5 from tornado.options import options 6 from webssh import handler 7 from webssh.handler import IndexHandler, WsockHandler, NotFoundHandler 8 from webssh.settings import ( 9 get_app_settings, get_host_keys_settings, get_policy_setting, 10 get_ssl_context, get_server_settings, check_encoding_setting 11 ) 12 13 14 def make_handlers(loop, options): 15 host_keys_settings = get_host_keys_settings(options) 16 policy = get_policy_setting(options, host_keys_settings) 17 18 handlers = [ 19 (r'/', IndexHandler, dict(loop=loop, policy=policy, 20 host_keys_settings=host_keys_settings)), 21 (r'/ws', WsockHandler, dict(loop=loop)) 22 ] 23 return handlers 24 25 26 def make_app(handlers, settings): 27 settings.update(default_handler_class=NotFoundHandler) 28 return tornado.web.Application(handlers, **settings) 29 30 31 def app_listen(app, port, address, server_settings): 32 app.listen(port, address, **server_settings) 33 if not server_settings.get('ssl_options'): 34 server_type = 'http' 35 else: 36 server_type = 'https' 37 handler.redirecting = True if options.redirect else False 38 logging.info( 39 'Listening on {}:{} ({})'.format(address, port, server_type) 40 ) 41 42 43 def main(): 44 options.parse_command_line() 45 check_encoding_setting(options.encoding) 46 loop = tornado.ioloop.IOLoop.current() 47 app = make_app(make_handlers(loop, options), get_app_settings(options)) 48 ssl_ctx = get_ssl_context(options) 49 server_settings = get_server_settings(options) 50 app_listen(app, options.port, options.address, server_settings) 51 if ssl_ctx: 52 server_settings.update(ssl_options=ssl_ctx) 53 app_listen(app, options.sslport, options.ssladdress, server_settings) 54 loop.start() 55 56 57 if __name__ == '__main__': 58 main()