File size: 2,345 Bytes
b92ee48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import tornado.ioloop
import tornado.web
import paramiko
from webssh.handler import IndexHandler, WsockHandler
from tornado.options import define, options

# Define application options
define('address', default='0.0.0.0', help='Bind address')
define('port', default=7860, help='Port to listen on')
define('xsrf', default=False, help='Enable XSRF protection')
define('debug', default=True, help='Enable debug mode')
define('maxconn', default=4, help='Maximum number of connections')
define('policy', default='autoadd', help='SSH host key policy')
define('sslport', default=443, help='SSL port for redirect')
define('timeout', default=30, help='SSH connection timeout')
define('encoding', default='utf-8', help='Default encoding')
define('delay', default=10, help='Delay before recycling worker')
define('xheaders', default=False, help='Support X-Real-Ip and X-Forwarded-For headers')
define('fbidhttp', default=False, help='Forbid public plain HTTP requests')

# New handler for your custom page
class MyPageHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('mypage.html')  # Render the new page template

def make_app():
    loop = tornado.ioloop.IOLoop.current()

    # Set SSH host key policy
    policy = paramiko.AutoAddPolicy() if options.policy == 'autoadd' else paramiko.RejectPolicy()

    # Define host keys settings
    host_keys_settings = {
        'system_host_keys': paramiko.util.load_host_keys('/app/ssh/ssh_known_hosts'),
        'host_keys': paramiko.HostKeys(),
        'host_keys_filename': None
    }

    # Create Tornado application
    return tornado.web.Application(
        [
            (r'/', IndexHandler, dict(loop=loop, policy=policy, host_keys_settings=host_keys_settings)),
            (r'/ws', WsockHandler, dict(loop=loop)),
            (r'/mypage', MyPageHandler),  # Route for your new page
        ],
        xsrf_cookies=options.xsrf,
        debug=options.debug,
        template_path='/app/WebSSH/templates',  # Correct template directory
    )

if __name__ == '__main__':
    # Parse command-line options
    tornado.options.parse_command_line()

    # Create and start the application
    app = make_app()
    app.listen(options.port, address=options.address)
    print(f"WebSSH server running on {options.address}:{options.port}")
    tornado.ioloop.IOLoop.current().start()