mirror of https://github.com/jumpserver/jumpserver
资产列表添加连接
parent
f00a2e003d
commit
483ca9677c
|
@ -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),
|
||||
)
|
|
@ -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())
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -130,6 +130,7 @@
|
|||
<a href="/jasset/asset_detail/?id={{ asset.id }}" class="btn btn-xs btn-primary">详情</a>
|
||||
{% ifnotequal session_role_id 0 %}
|
||||
<a href="/jasset/asset_edit/?id={{ asset.id }}" class="btn btn-xs btn-info">编辑</a>
|
||||
<a value="{{ asset.id }}" class="conn btn btn-xs btn-warning">连接</a>
|
||||
<a value="/jasset/asset_del/?id={{ asset.id }}" class="btn btn-xs btn-danger asset_del">删除</a>
|
||||
{% endifnotequal %}
|
||||
</td>
|
||||
|
@ -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 += '<a onclick="windowOpen(this); return false" class="btn btn-xs btn-primary newa" href=' + new_url + value + '>' + value + '</a> '
|
||||
});
|
||||
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 == ''){
|
||||
|
|
Loading…
Reference in New Issue