webssh

Web based ssh client https://github.com/huashengdun/webssh webssh.huashengdun.org/
git clone http://git.hanabi.in/repos/webssh.git
Log | Files | Refs | README | LICENSE

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()