From 92e9f988f35dc6d9b59293f2f003a48dba1b9059 Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 16:51:41 +0800 Subject: [PATCH 1/9] feat(run_websocket.py): add main function, it need only run run_websocket.py I want to run one program at once, open two terminal is ridiculous --- run_websocket.py | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/run_websocket.py b/run_websocket.py index ec6b2f73f..2c761ee50 100755 --- a/run_websocket.py +++ b/run_websocket.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python # coding: utf-8 import time @@ -31,7 +32,7 @@ try: except ImportError: import json - +os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings' define("port", default=3000, help="run on the given port", type=int) define("host", default='0.0.0.0', help="run port on given host", type=str) @@ -425,12 +426,40 @@ class Application(tornado.web.Application): tornado.web.Application.__init__(self, handlers, **setting) -if __name__ == '__main__': - tornado.options.parse_command_line() - app = Application() - server = tornado.httpserver.HTTPServer(app) - server.bind(options.port, options.host) - #server.listen(options.port) - server.start(num_processes=5) - print "Run server on %s:%s" % (options.host, options.port) +def main(): + from django.core.wsgi import get_wsgi_application + import tornado.wsgi + wsgi_app = get_wsgi_application() + container = tornado.wsgi.WSGIContainer(wsgi_app) + setting = { + 'cookie_secret': 'DFksdfsasdfkasdfFKwlwfsdfsa1204mx', + 'template_path': os.path.join(os.path.dirname(__file__), 'templates'), + 'static_path': os.path.join(os.path.dirname(__file__), 'static'), + 'debug': False, + } + tornado_app = tornado.web.Application( + [ + # (r'/monitor', MonitorHandler), + (r'/terminal', WebTerminalHandler), + (r'/kill', WebTerminalKillHandler), + (r'/exec', ExecHandler), + (r"/static/(.*)", tornado.web.StaticFileHandler, + dict(path=os.path.join(os.path.dirname(__file__), "static"))), + ('.*', tornado.web.FallbackHandler, dict(fallback=container)), + ], **setting) + + server = tornado.httpserver.HTTPServer(tornado_app) + server.listen(options.port) + tornado.ioloop.IOLoop.instance().start() + +if __name__ == '__main__': + # tornado.options.parse_command_line() + # app = Application() + # server = tornado.httpserver.HTTPServer(app) + # server.bind(options.port, options.host) + # #server.listen(options.port) + # server.start(num_processes=5) + # print "Run server on %s:%s" % (options.host, options.port) + # tornado.ioloop.IOLoop.instance().start() + main() From 4f75f76db88f4a8f17df27c77091af1114e49342 Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 20:05:20 +0800 Subject: [PATCH 2/9] fix: web socket url update --- jumpserver/views.py | 2 +- run_websocket.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jumpserver/views.py b/jumpserver/views.py index afe5ddd38..b95c314b4 100644 --- a/jumpserver/views.py +++ b/jumpserver/views.py @@ -356,7 +356,7 @@ def web_terminal(request): if asset: print asset hostname = asset.hostname - web_terminal_uri = '%s/terminal?id=%s&role=%s' % (WEB_SOCKET_HOST, asset_id, role_name) + web_terminal_uri = '%s/ws/terminal?id=%s&role=%s' % (WEB_SOCKET_HOST, asset_id, role_name) return render_to_response('jlog/web_terminal.html', locals()) diff --git a/run_websocket.py b/run_websocket.py index 2c761ee50..0f758b947 100755 --- a/run_websocket.py +++ b/run_websocket.py @@ -439,8 +439,8 @@ def main(): } tornado_app = tornado.web.Application( [ - # (r'/monitor', MonitorHandler), - (r'/terminal', WebTerminalHandler), + (r'/monitor', MonitorHandler), + (r'/ws/terminal', WebTerminalHandler), (r'/kill', WebTerminalKillHandler), (r'/exec', ExecHandler), (r"/static/(.*)", tornado.web.StaticFileHandler, From 9c93d5a8d2280ffc091e8b31e95a86f7f57e6f2c Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 20:42:35 +0800 Subject: [PATCH 3/9] add /ws/ --- jumpserver/views.py | 5 +++-- run_websocket.py | 2 +- templates/exec_cmd.html | 2 +- templates/jlog/web_terminal.html | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/jumpserver/views.py b/jumpserver/views.py index b95c314b4..7aa51dcac 100644 --- a/jumpserver/views.py +++ b/jumpserver/views.py @@ -344,7 +344,7 @@ def download(request): def exec_cmd(request): role = request.GET.get('role') check_assets = request.GET.get('check_assets', '') - web_terminal_uri = '%s/exec?role=%s' % (WEB_SOCKET_HOST, role) + web_terminal_uri = '/ws/exec?role=%s' % (role) return my_render('exec_cmd.html', locals(), request) @@ -356,7 +356,8 @@ def web_terminal(request): if asset: print asset hostname = asset.hostname - web_terminal_uri = '%s/ws/terminal?id=%s&role=%s' % (WEB_SOCKET_HOST, asset_id, role_name) + # web_terminal_uri = '%s/ws/terminal?id=%s&role=%s' % (WEB_SOCKET_HOST, asset_id, role_name) + web_terminal_uri = '/ws/terminal?id=%s&role=%s' % (asset_id, role_name) return render_to_response('jlog/web_terminal.html', locals()) diff --git a/run_websocket.py b/run_websocket.py index 0f758b947..7f0e21469 100755 --- a/run_websocket.py +++ b/run_websocket.py @@ -442,7 +442,7 @@ def main(): (r'/monitor', MonitorHandler), (r'/ws/terminal', WebTerminalHandler), (r'/kill', WebTerminalKillHandler), - (r'/exec', ExecHandler), + (r'/ws/exec', ExecHandler), (r"/static/(.*)", tornado.web.StaticFileHandler, dict(path=os.path.join(os.path.dirname(__file__), "static"))), ('.*', tornado.web.FallbackHandler, dict(fallback=container)), diff --git a/templates/exec_cmd.html b/templates/exec_cmd.html index d1eda2fcb..2316229e8 100644 --- a/templates/exec_cmd.html +++ b/templates/exec_cmd.html @@ -29,7 +29,7 @@ protocol = 'wss://'; } - var wsUri = protocol + "{{ web_terminal_uri }}"; //请求的websocket url + var wsUri = protocol + document.URL.match(RegExp('//(.*?)/'))[1] + "{{ web_terminal_uri }}"; //请求的websocket url var ws = new WebSocket(wsUri); function createSystemMessage(message) { diff --git a/templates/jlog/web_terminal.html b/templates/jlog/web_terminal.html index 420249a10..547002f19 100644 --- a/templates/jlog/web_terminal.html +++ b/templates/jlog/web_terminal.html @@ -48,7 +48,7 @@ protocol = 'wss://'; } - var endpoint = protocol + '{{ web_terminal_uri }}'; + var endpoint = protocol + document.URL.match(RegExp('//(.*?)/'))[1] + '{{ web_terminal_uri }}'; if (window.WebSocket) { this._connection = new WebSocket(endpoint); From c354b646791d58243c15b33765a8580406788662 Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 20:44:13 +0800 Subject: [PATCH 4/9] web log_kill --- templates/jlog/log_online.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/jlog/log_online.html b/templates/jlog/log_online.html index f82969156..ed56e06e1 100644 --- a/templates/jlog/log_online.html +++ b/templates/jlog/log_online.html @@ -213,7 +213,7 @@ if (login_type=='web'){ var g_url = '{{ web_kill_uri }}' + '?id=' + num; } else { - var g_url = "{% url 'log_kill' %} }?id=" + num; + var g_url = "{% url 'log_kill' %} ?id=" + num; } $.ajax({ From 23d4c926b74327258ae133e7e8760014594d60c5 Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 20:45:48 +0800 Subject: [PATCH 5/9] web log_kill --- templates/jlog/log_online.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/jlog/log_online.html b/templates/jlog/log_online.html index ed56e06e1..814a463eb 100644 --- a/templates/jlog/log_online.html +++ b/templates/jlog/log_online.html @@ -213,7 +213,7 @@ if (login_type=='web'){ var g_url = '{{ web_kill_uri }}' + '?id=' + num; } else { - var g_url = "{% url 'log_kill' %} ?id=" + num; + var g_url = "{% url 'log_kill' %}?id=" + num; } $.ajax({ From eb161b978a6fa357adb130074e59d520fae1c5f2 Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 21:00:48 +0800 Subject: [PATCH 6/9] test kill --- templates/jlog/log_online.html | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/templates/jlog/log_online.html b/templates/jlog/log_online.html index 814a463eb..b46886413 100644 --- a/templates/jlog/log_online.html +++ b/templates/jlog/log_online.html @@ -216,12 +216,14 @@ var g_url = "{% url 'log_kill' %}?id=" + num; } - $.ajax({ - type: "GET", - url: g_url+"&sessionid={{ session_id }}", - success: window.open("{% url 'log_list' 'online' %}", "_self") - }); - +{# $.ajax({#} +{# type: "GET",#} +{# url: g_url+"&sessionid={{ session_id }}",#} +{# success: window.open("{% url 'log_list' 'online' %}", "_self")#} +{# });#} + $.get(g_url+"&sessionid={{ session_id }}", function () { + window.open("{% url 'log_list' 'online' %}", "_self") + }) } {% endblock %} \ No newline at end of file From 7213c5c63738ed6913a73e90e2462ed1b038ef3e Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 21:04:27 +0800 Subject: [PATCH 7/9] fix(log_online.html): log kill bug change $.ajax to $.get --- templates/jlog/log_online.html | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/templates/jlog/log_online.html b/templates/jlog/log_online.html index f82969156..14fec40ae 100644 --- a/templates/jlog/log_online.html +++ b/templates/jlog/log_online.html @@ -213,14 +213,11 @@ if (login_type=='web'){ var g_url = '{{ web_kill_uri }}' + '?id=' + num; } else { - var g_url = "{% url 'log_kill' %} }?id=" + num; + var g_url = "{% url 'log_kill' %}?id=" + num; } - - $.ajax({ - type: "GET", - url: g_url+"&sessionid={{ session_id }}", - success: window.open("{% url 'log_list' 'online' %}", "_self") - }); + $.get(g_url+"&sessionid={{ session_id }}", function () { + window.open("{% url 'log_list' 'online' %}", "_self") + }) } From 4d5d56fe797fd4c174f694479e3d2bb93d6a3137 Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 21:07:18 +0800 Subject: [PATCH 8/9] fix(jlog/views.py): kill bug, because cross domain --- jlog/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jlog/views.py b/jlog/views.py index e2565250e..61ab19ddc 100644 --- a/jlog/views.py +++ b/jlog/views.py @@ -67,7 +67,7 @@ def log_list(request, offset): contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) web_monitor_uri = '%s/monitor' % WEB_SOCKET_HOST - web_kill_uri = 'http://%s/kill' % WEB_SOCKET_HOST + web_kill_uri = '/kill' session_id = request.session.session_key return render_to_response('jlog/log_%s.html' % offset, locals(), context_instance=RequestContext(request)) From 1816723f1643d07a9f35e70b17a6b6cf0d4b282b Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Thu, 25 Feb 2016 22:43:52 +0800 Subject: [PATCH 9/9] fix(run_websocket.py): get real ip from headers --- run_websocket.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/run_websocket.py b/run_websocket.py index 7f0e21469..7030d2fc0 100755 --- a/run_websocket.py +++ b/run_websocket.py @@ -315,7 +315,8 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler): logger.debug('Websocket: request web terminal Host: %s User: %s Role: %s' % (asset.hostname, self.user.username, login_role.name)) self.term = WebTty(self.user, asset, login_role, login_type='web') - self.term.remote_ip = self.request.remote_ip + # self.term.remote_ip = self.request.remote_ip + self.term.remote_ip = self.request.headers.get("X-Real_IP") self.ssh = self.term.get_connection() self.channel = self.ssh.invoke_shell(term='xterm') WebTerminalHandler.tasks.append(MyThread(target=self.forward_outbound))