Merge branch 'feature/search' of github.com:eomsoft/teleport into feature/search

pull/105/head
Apex Liu 2018-05-18 03:04:44 +08:00
commit f0715736a2
7 changed files with 98 additions and 165 deletions

View File

@ -28,8 +28,10 @@
<file url="file://$PROJECT_DIR$/tp_core/core/ts_session.h" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/core/ts_web_rpc.cpp" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/core/ts_web_rpc.h" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/protocol/rdp/rdp_conn.cpp" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/protocol/rdp/rdp_conn.h" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/protocol/rdp/rdp_package.cpp" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/protocol/rdp/rdp_package.h" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/protocol/rdp/rdp_proxy.cpp" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/protocol/rdp/rdp_session.cpp" charset="GBK" />
<file url="file://$PROJECT_DIR$/tp_core/protocol/ssh/ssh_proxy.cpp" charset="GBK" />

View File

@ -3,6 +3,9 @@
$app.on_init = function (cb_stack) {
$app.dom = {
// assist_ver: $('#tp-assist-ver'),
btn_sel_group: $('#btn-sel-group button'),
group_list_for_sel: $('#btn-sel-group ul'),
btn_refresh_host: $('#btn-refresh-host'),
btn_add_host: $('#btn-add-host'),
chkbox_host_select_all: $('#table-host-select-all'),
@ -19,6 +22,27 @@ $app.on_init = function (cb_stack) {
upload_file_message: $('#upload-file-message')
};
console.log($app.options.host_groups);
// var i = 0;
// var html = [];
// html.push('<optioin value="0">所有分组</optioin>');
// html.push('<optioin value="-1">----------</optioin>');
// for(i = 0; i < $app.options.host_groups.length; ++i) {
// html.push('<optioin value="'+$app.options.host_groups[i].id+'">'+$app.options.host_groups[i].name+'</optioin>');
// }
// $app.dom.sel_host_group.ap
var html = [];
$.each($app.options.host_groups, function (i, item) {
html.push('<li><a href="javascript:;" data-tp-selector="' + item.id + '" data-name="' + item.name + '"><i class="fa fa-caret-right fa-fw"></i> ' + item.name + '</a></li>');
});
$app.dom.group_list_for_sel.append($(html.join('')));
$app.dom.group_list_for_sel.find('a[data-tp-selector]').click(function () {
var obj = $(this);
//$app.set_selected_to_role(parseInt(obj.attr('data-tp-selector')), obj.attr('data-name'));
});
// $tp.assist_checked = function () {
// console.log("---------");
// if ($tp.assist.running) {
@ -1537,9 +1561,9 @@ $app.create_dlg_edit_account = function () {
dlg.dom.block_sshkey.hide();
if (dlg.field_protocol === TP_PROTOCOL_TYPE_TELNET) {
dlg.dom.block_prompt.show();
if(dlg.dom.prompt_username.val().length === 0 && dlg.account.username_prompt.length === 0)
if (dlg.dom.prompt_username.val().length === 0 && dlg.account.username_prompt.length === 0)
dlg.dom.prompt_username.val('ogin:');
if(dlg.dom.prompt_password.val().length === 0 && dlg.account.password_prompt.length === 0)
if (dlg.dom.prompt_password.val().length === 0 && dlg.account.password_prompt.length === 0)
dlg.dom.prompt_password.val('assword:');
}
} else if (dlg.field_auth === TP_AUTH_TYPE_PRIVATE_KEY) {

View File

@ -6,11 +6,16 @@
<%inherit file="../page_base.mako"/>
<%block name="extend_js_file">
## <script type="text/javascript" src="${ static_url('js/tp-assist.js') }"></script>
<script type="text/javascript" src="${ static_url('js/asset/host-list.js') }"></script>
<script type="text/javascript" src="${ static_url('plugins/jquery/ajaxfileupload.js') }"></script>
</%block>
<%block name="embed_js">
<script type="text/javascript">
$app.add_options(${page_param});
</script>
</%block>
<%block name="embed_css">
<style>
</style>
@ -18,7 +23,7 @@
<%block name="breadcrumb_extra">
<ol class="breadcrumb breadcrumb-list">
## <li><i class="fa fa-clock-o"></i> 服务器时间:<span id="tp-timer">-</span></li>
## <li><i class="fa fa-clock-o"></i> 服务器时间:<span id="tp-timer">-</span></li>
## <li><i class="fa fa-bolt"></i> 助手版本:<span id="tp-assist-ver"></span></li>
</ol>
</%block>
@ -29,9 +34,20 @@
<!-- begin box -->
<div class="box">
<p>filter goes here...</p>
<div class="btn-group dropdown" id="btn-sel-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-edit fa-fw"></i> 所有分组 <i class="fa fa-caret-right"></i></button>
<ul class="dropdown-menu dropdown-menu-sm"></ul>
</div>
<hr/>
<div class="table-prefix-area">
<div class="table-extend-cell">
<span class="table-name"><i class="fa fa-list fa-fw"></i> 主机列表</span>
<button id="btn-refresh-host" class="btn btn-sm btn-default"><i class="fa fa-redo fa-fw"></i> 刷新列表</button>
</div>
<div class="table-extend-cell table-extend-cell-right group-actions">

View File

@ -71,7 +71,7 @@
<div class="table-extend-cell group-actions">
<div class="btn-group" role="group">
<div class="btn-group">
<div class="btn-group dropup" id="btn-set-role" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-edit fa-fw"></i> 设置角色 <i class="fa fa-caret-right"></i></button>
<ul class="dropdown-menu dropdown-menu-sm"></ul>

View File

@ -24,7 +24,13 @@ class HostListHandler(TPBaseHandler):
ret = self.check_privilege(TP_PRIVILEGE_ASSET_CREATE | TP_PRIVILEGE_ASSET_DELETE | TP_PRIVILEGE_ASSET_GROUP)
if ret != TPE_OK:
return
self.render('asset/host-list.mako')
err, groups = group.get_host_groups_for_user(self.current_user['id'], self.current_user['privilege'])
param = {
'host_groups': groups
}
self.render('asset/host-list.mako', page_param=json.dumps(param))
class DoGetHostsHandler(TPBaseJsonHandler):

View File

@ -711,10 +711,8 @@ class DoResetPasswordHandler(TPBaseJsonHandler):
if mode == 1 or mode == 3:
err, email, token = user.generate_reset_password_token(self, user_id)
# 生成一个密码重置链接24小时有效
# token = tp_generate_random(16)
# generate an URL for reset password, valid in 24hr.
reset_url = '{}://{}/user/reset-password?token={}'.format(self.request.protocol, self.request.host, token)
# reset_url = 'http://127.0.0.1/user/validate-password-reset-token?token=G66LXH0EOJ47OXTH7O5KBQ0PHXRSBXBVVFALI6JBJ8HNWUALWI35QECPJ8UV8DEQ'
err, msg = yield mail.tp_send_mail(
email,
@ -793,159 +791,6 @@ class DoUpdateUsersHandler(TPBaseJsonHandler):
self.write_json(err)
# class DoRemoveGroupHandler(TPBaseJsonHandler):
# def post(self):
# ret = self.check_privilege(TP_PRIVILEGE_USER_GROUP)
# if ret != TPE_OK:
# return
#
# args = self.get_argument('args', None)
# if args is None:
# return self.write_json(TPE_PARAM)
# try:
# args = json.loads(args)
# except:
# return self.write_json(TPE_JSON_FORMAT)
#
# try:
# group_list = args['group_list']
# except:
# return self.write_json(TPE_PARAM)
#
# err = user.remove_group(self, group_list)
# self.write_json(err)
# class AuthHandler(TPBaseAdminAuthHandler):
# def get(self, user_name):
# group_list = host.get_group_list()
# cert_list = host.get_cert_list()
# self.render('user/auth.mako',
# group_list=group_list,
# cert_list=cert_list, user_name=user_name)
#
#
# class GetListHandler(TPBaseAdminAuthJsonHandler):
# def post(self):
# user_list = user.get_user_list(with_admin=False)
# ret = dict()
# ret['page_index'] = 10
# ret['total'] = len(user_list)
# ret['data'] = user_list
# self.write_json(0, data=ret)
#
#
# class DeleteUser(TPBaseUserAuthJsonHandler):
# def post(self):
# args = self.get_argument('args', None)
# if args is not None:
# args = json.loads(args)
# else:
# return self.write_json(-1, 'invalid param')
#
# user_id = args['user_id']
# try:
# ret = user.delete_user(user_id)
# if ret:
# return self.write_json(0)
# else:
# return self.write_json(-2, 'database op failed.')
# except:
# log.e('delete user failed.\n')
# return self.write_json(-3, 'got exception.')
#
#
# class ModifyUser(TPBaseUserAuthJsonHandler):
# def post(self):
# args = self.get_argument('args', None)
# if args is not None:
# args = json.loads(args)
# else:
# return self.write_json(-1, 'invalid param.')
#
# user_id = args['user_id']
# user_desc = args['user_desc']
#
# try:
# ret = user.modify_user(user_id, user_desc)
# if ret:
# self.write_json(0)
# else:
# self.write_json(-2, 'database op failed.')
# return
# except:
# log.e('modify user failed.\n')
# self.write_json(-3, 'got exception.')
#
#
# class AddUser(TPBaseUserAuthJsonHandler):
# def post(self):
# args = self.get_argument('args', None)
# if args is not None:
# args = json.loads(args)
# else:
# return self.write_json(-1, 'invalid param.')
#
# user_name = args['user_name']
# user_pwd = '123456'
# user_desc = args['user_desc']
# if user_desc is None:
# user_desc = ''
# try:
# ret = user.add_user(user_name, user_pwd, user_desc)
# if 0 == ret:
# return self.write_json(0)
# else:
# return self.write_json(ret, 'database op failed. errcode={}'.format(ret))
# except:
# log.e('add user failed.\n')
# return self.write_json(-3, 'got exception.')
#
#
# class LockUser(TPBaseUserAuthJsonHandler):
# def post(self):
# args = self.get_argument('args', None)
# if args is not None:
# args = json.loads(args)
# else:
# return self.write_json(-1, 'invalid param.')
#
# user_id = args['user_id']
# lock_status = args['lock_status']
#
# try:
# ret = user.lock_user(user_id, lock_status)
# if ret:
# return self.write_json(0)
# else:
# return self.write_json(-2, 'database op failed.')
# except:
# log.e('lock user failed.\m')
# return self.write_json(-3, 'got exception.')
#
#
# class ResetUser(TPBaseUserAuthJsonHandler):
# def post(self):
# args = self.get_argument('args', None)
# if args is not None:
# args = json.loads(args)
# else:
# return self.write_json(-1, 'invalid param.')
#
# user_id = args['user_id']
# # lock_status = args['lock_status']
#
# try:
# ret = user.reset_user(user_id)
# if ret:
# return self.write_json(0)
# else:
# return self.write_json(-2, 'database op failed.')
# except:
# log.e('reset user failed.\n')
# return self.write_json(-3, 'got exception.')
#
class DoGetGroupWithMemberHandler(TPBaseJsonHandler):
def post(self):
ret = self.check_privilege(TP_PRIVILEGE_USER_GROUP)

View File

@ -361,9 +361,49 @@ def get_groups(sql_filter, sql_order, sql_limit, sql_restrict, sql_exclude):
return err, s.total_count, s.page_index, s.recorder
def get_host_groups_for_user(handler):
# 获取当前用户能查看的主机分组列表
pass
def get_host_groups_for_user(user_id, user_privilege):
# get all host-groups for current logged in user.
db = get_db()
# step 0. return all host-groups if user have all host-group access privilege
if (user_privilege & (TP_PRIVILEGE_ASSET_CREATE | TP_PRIVILEGE_ASSET_DELETE | TP_PRIVILEGE_ASSET_GROUP)) != 0:
s = SQL(get_db())
s.select_from('group', ['id', 'name'], alt_name='g')
s.where('g.type={}'.format(TP_GROUP_HOST))
s.order_by('g.name')
err = s.query()
return err, s.recorder
# step 1. get all hosts which could be access by this user.
sql = 'SELECT `h_id` FROM `{dbtp}ops_map` WHERE `u_id`={dbph} GROUP BY `h_id`;'.format(dbtp=db.table_prefix, dbph=db.place_holder)
db_ret = db.query(sql, (user_id, ))
if db_ret is None or len(db_ret) == 0:
return TPE_NOT_EXISTS, None
hosts = []
for db_item in db_ret:
hosts.append(str(db_item[0]))
# step 2. get groups which include those hosts.
sql = 'SELECT `gid` FROM `{dbtp}group_map` WHERE (`type`={dbph} AND `mid` IN ({dbph})) GROUP BY `gid`;'.format(dbtp=db.table_prefix, dbph=db.place_holder, hosts=','.join(hosts))
db_ret = db.query(sql, (TP_GROUP_HOST, ','.join(hosts)))
if db_ret is None or len(db_ret) == 0:
return TPE_NOT_EXISTS, None
groups = []
for db_item in db_ret:
groups.append(str(db_item[0]))
# step 3. get those groups id and name.
s = SQL(get_db())
s.select_from('group', ['id', 'name'], alt_name='g')
s.where('g.id IN ({})'.format(','.join(groups)))
s.order_by('g.name')
err = s.query()
return err, s.recorder
def get_acc_groups_for_user(handler):