diff --git a/jlog/urls.py b/jlog/urls.py
index 0058bcfe6..deb2902b4 100644
--- a/jlog/urls.py
+++ b/jlog/urls.py
@@ -9,4 +9,5 @@ urlpatterns = patterns('',
url(r'^log_kill/', log_kill),
url(r'^record/$', log_record),
url(r'^web_terminal/$', web_terminal),
+ url(r'^get_role_name/$', get_role_name),
)
\ No newline at end of file
diff --git a/jlog/views.py b/jlog/views.py
index d5f38852d..20b7f7c98 100644
--- a/jlog/views.py
+++ b/jlog/views.py
@@ -4,6 +4,7 @@ from django.template import RequestContext
from django.shortcuts import render_to_response
from jumpserver.api import *
+from jperm.perm_api import user_have_perm
from django.http import HttpResponseNotFound
from jlog.log_api import renderTemplate
@@ -103,8 +104,18 @@ def log_record(request):
return HttpResponse('无日志记录!')
+def get_role_name(request):
+ asset_id = request.GET.get('id', 9999)
+ asset = get_object(Asset, id=asset_id)
+ if asset:
+ role = user_have_perm(request.user, asset=asset)
+ return HttpResponse(','.join(list(role)))
+ return HttpResponse('dev,sa')
+
+
+@require_role()
def web_terminal(request):
- asset_id = 15
- web_terminal_uri = 'ws://%s/terminal?asset_id=%s' % (WEB_SOCKET_HOST, asset_id)
+ asset_id = request.GET.get('id')
+ web_terminal_uri = 'ws://%s/terminal?id=%s&role=dev' % (WEB_SOCKET_HOST, asset_id)
return render_to_response('jlog/web_terminal.html', locals())
diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py
index 5af20cdd6..c8f5debde 100644
--- a/jumpserver/templatetags/mytags.py
+++ b/jumpserver/templatetags/mytags.py
@@ -237,3 +237,12 @@ def key_exist(username):
return True
else:
return False
+
+
+@register.filter(name='check_role')
+def check_role(asset_id, user):
+ """
+ ssh key is exist or not
+ """
+ return user
+
diff --git a/run_websocket.py b/run_websocket.py
index d2b76e36c..27420b4ea 100644
--- a/run_websocket.py
+++ b/run_websocket.py
@@ -56,7 +56,7 @@ def require_auth(func):
session = session[0]
uid = session.get_decoded().get('_auth_user_id')
user = User.objects.filter(id=uid)
- asset_id = request.get_argument('asset_id', 9999)
+ asset_id = int(request.get_argument('id', 9999))
asset = Asset.objects.filter(id=asset_id)
if asset:
@@ -240,10 +240,19 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
@require_auth
def open(self):
print self.user, self.asset
- user = User.objects.get(username='lastimac')
- asset = Asset.objects.get(ip='192.168.244.129')
- role = PermRole.objects.get(name='dev')
- self.term = WebTty(user, asset, role)
+ role_name = self.get_argument('role', 'root')
+ roles = user_have_perm(self.user, self.asset)
+ login_role = ''
+ for role in roles:
+ if role.name == role_name:
+ login_role = role
+ break
+ if not login_role:
+ print "no role"
+ self.close()
+ return
+ # Todo: 判断
+ self.term = WebTty(self.user, self.asset, login_role)
self.term.get_connection()
self.term.channel = self.term.ssh.invoke_shell(term='xterm')
WebTerminalHandler.tasks.append(MyThread(target=self.forward_outbound))
diff --git a/templates/jasset/asset_list.html b/templates/jasset/asset_list.html
index fe03cc1a2..eb37d5030 100644
--- a/templates/jasset/asset_list.html
+++ b/templates/jasset/asset_list.html
@@ -130,6 +130,7 @@
详情
{% ifnotequal session_role_id 0 %}
编辑
+ 连接
删除
{% endifnotequal %}
@@ -167,9 +168,46 @@
}
)
}
- })
+ });
+
+ $('.conn').click(function(evt){
+ var url='/jlog/get_role_name/?id' + $(this).attr('value');
+ var href = $(this).attr('href');
+ var new_url = '/jlog/web_terminal/?id=' + $(this).attr('value') + '&role=';
+ $.ajax({
+ type: 'GET',
+ url: url,
+ data: {},
+ success: function(data){
+ var dataArray = data.split(',');
+ if (dataArray.length == 1){
+ window.open(new_url + data, '播放', 'height=400, width=600, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
+ } else if (dataArray.length == 0){
+ layer.alert('没有授权角色')
+ } else {
+ aUrl = '';
+ $.each(dataArray, function(index, value){
+ aUrl += '' + value + ' '
+ });
+ layer.alert(aUrl, {
+ skin: 'layui-layer-molv',
+ title: '多个角色,请选择一个连接',
+ closeBtn: 0
+ })
+ }
+
+ }
+ });
+ return false
+ });
});
+ function windowOpen(aTab){
+ var new_url = aTab.href;
+ window.open(new_url, '播放', 'height=400, width=600, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
+ return false
+ }
+
$(".iframe").on('click', function(){
var asset_id_all = getIDall();
if (asset_id_all == ''){
@@ -206,6 +244,8 @@
});
});
+
+
$('#asset_del').click(function () {
var asset_id_all = getIDall();
if (asset_id_all == ''){