Merge pull request #175 from horizonlin/feature/mstsc

增加用户期限
pull/236/head
Apex Liu 2019-11-17 03:54:51 +08:00 committed by GitHub
commit 363be82945
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 78 additions and 17 deletions

View File

@ -84,11 +84,11 @@ $assist.alert_assist_not_found = function () {
if($assist.errcode === TPE_NO_ASSIST) {
$assist.dom.msg_box_title.html('未检测到TELEPORT助手');
$assist.dom.msg_box_info.html('需要TELEPORT助手来辅助远程连接请确认本机运行了TELEPORT助手');
$assist.dom.msg_box_desc.html('如果您尚未运行TELEPORT助手请 <a href="http://tp4a.com/download" target="_blank"><strong>下载最新版TELEPORT助手安装包</strong></a> 并安装。一旦运行了TELEPORT助手即可刷新页面重新进行远程连接。');
$assist.dom.msg_box_desc.html('如果您尚未运行TELEPORT助手请 <a href="/static/download/teleport-assist-windows.exe" target="_blank"><strong>下载最新版TELEPORT助手安装包</strong></a> 并安装。一旦运行了TELEPORT助手即可刷新页面重新进行远程连接。');
} else if($assist.errcode === TPE_OLD_ASSIST) {
$assist.dom.msg_box_title.html('TELEPORT助手需要升级');
$assist.dom.msg_box_info.html('检测到TELEPORT助手版本 v'+ $assist.version +',但需要最低版本 v'+ $assist.ver_require+'。');
$assist.dom.msg_box_desc.html('请 <a href="http://tp4a.com/download" target="_blank"><strong>下载最新版TELEPORT助手安装包</strong></a> 并安装。一旦升级了TELEPORT助手即可刷新页面重新进行远程连接。');
$assist.dom.msg_box_desc.html('请 <a href="/static/download/teleport-assist-windows.exe" target="_blank"><strong>下载最新版TELEPORT助手安装包</strong></a> 并安装。一旦升级了TELEPORT助手即可刷新页面重新进行远程连接。');
}
$('#dialog-need-assist').modal();
@ -147,8 +147,10 @@ $assist._make_message_box = function () {
};
$assist.do_teleport = function (args, func_success, func_error) {
if(!$assist.check())
if(!$app.options.url_proto){
if(!$assist.check())
return;
}
// 第一步将参数传递给web服务准备获取一个远程连接会话ID
var args_ = JSON.stringify(args);

View File

@ -744,6 +744,8 @@ $app.create_dlg_edit_user = function () {
dlg.field_mobile = '';
dlg.field_qq = '';
dlg.field_wechat = '';
dlg.field_vaild_from = '';
dlg.field_vaild_to = '';
dlg.field_desc = '';
dlg.dom = {
@ -756,6 +758,8 @@ $app.create_dlg_edit_user = function () {
, edit_mobile: $('#edit-user-mobile')
, edit_qq: $('#edit-user-qq')
, edit_wechat: $('#edit-user-wechat')
, edit_valid_from: $('#edit-user-valid-from')
, edit_valid_to: $('#edit-user-valid-to')
, edit_desc: $('#edit-user-desc')
, msg: $('#edit-user-message')
, btn_save: $('#btn-edit-user-save')
@ -778,6 +782,8 @@ $app.create_dlg_edit_user = function () {
_ret.push('<li><a href="javascript:;" data-tp-selector="' + role.id + '"><i class="fa fa-user-circle fa-fw"></i> ' + role.name + '</a></li>');
});
_ret.push('</ul>');
dlg.dom.edit_valid_from.datetimepicker({format: "yyyy-mm-dd h:ii", autoclose: 1, todayHighlight: 1});
dlg.dom.edit_valid_to.datetimepicker({format: "yyyy-mm-dd h:ii", autoclose: 1, todayHighlight: 1});
dlg.dom.select_role.after($(_ret.join('')));
dlg.dom.selected_role = $('#' + dlg.dom_id + ' span[data-selected-role]');
@ -869,7 +875,7 @@ $app.create_dlg_edit_user = function () {
var role_name = '选择角色';
dlg.field_role = -1;
dlg.field_auth_type = 0;
// dlg.dom.btn_auth_use_sys_config.removeClass('tp-selected');
// dlg.dom.btn_auth_username_password.removeClass('tp-selected');
// dlg.dom.btn_auth_username_password_captcha.removeClass('tp-selected');
@ -887,6 +893,8 @@ $app.create_dlg_edit_user = function () {
dlg.dom.edit_qq.val('');
dlg.dom.edit_wechat.val('');
dlg.dom.edit_desc.val('');
dlg.dom.edit_valid_from.find('input').val('');
dlg.dom.edit_valid_to.find('input').val('');
} else {
dlg.field_id = user.id;
dlg.field_auth_type = user.auth_type;
@ -905,6 +913,16 @@ $app.create_dlg_edit_user = function () {
dlg.dom.edit_qq.val(user.qq);
dlg.dom.edit_wechat.val(user.wechat);
dlg.dom.edit_desc.val(user.desc);
if (user.valid_from == 0 ) {
dlg.dom.edit_valid_from.find('input').val('');
}else{
dlg.dom.edit_valid_from.find('input').val(tp_format_datetime(tp_utc2local(user.valid_from), 'yyyy-MM-dd HH:mm'));
}
if (user.valid_to == 0 ) {
dlg.dom.edit_valid_to.find('input').val('');
}else{
dlg.dom.edit_valid_to.find('input').val(tp_format_datetime(tp_utc2local(user.valid_to), 'yyyy-MM-dd HH:mm'));
}
}
dlg.dom.selected_role.text(role_name);
@ -943,6 +961,8 @@ $app.create_dlg_edit_user = function () {
dlg.field_mobile = dlg.dom.edit_mobile.val();
dlg.field_qq = dlg.dom.edit_qq.val();
dlg.field_wechat = dlg.dom.edit_wechat.val();
dlg.field_valid_from = dlg.dom.edit_valid_from.find('input').val();
dlg.field_valid_to = dlg.dom.edit_valid_to.find('input').val();
dlg.field_desc = dlg.dom.edit_desc.val();
if (dlg.field_role === -1) {
@ -1002,6 +1022,8 @@ $app.create_dlg_edit_user = function () {
, mobile: dlg.field_mobile
, qq: dlg.field_qq
, wechat: dlg.field_wechat
, valid_from: dlg.field_valid_from
, valid_to: dlg.field_valid_to
, desc: dlg.field_desc
},
function (ret) {

View File

@ -8,6 +8,7 @@
<%block name="extend_js_file">
<script type="text/javascript" src="${ static_url('js/user/user-list.js') }"></script>
<script type="text/javascript" src="${ static_url('plugins/jquery/ajaxfileupload.js') }"></script>
<script type="text/javascript" src="${ static_url('plugins/datetimepicker/js/bootstrap-datetimepicker.js') }"></script>
</%block>
<%block name="embed_js">
@ -230,6 +231,25 @@
<input id="edit-user-wechat" type="text" class="form-control"/>
</div>
</div>
<div class="form-group form-group-sm">
<label for="edit-user-valid-date" class="col-sm-2 control-label">生效时间:</label>
<div class="col-sm-5">
<div class='input-group date' id='edit-user-valid-from'>
<input type='text' class="form-control" />
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
<div class='input-group date' id='edit-user-valid-to'>
<input type='text' class="form-control" />
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group form-group-sm">
<label for="edit-user-desc" class="col-sm-2 control-label">备注:</label>

View File

@ -588,13 +588,22 @@ class DoUpdateUserHandler(TPBaseJsonHandler):
args['mobile'] = args['mobile'].strip()
args['qq'] = args['qq'].strip()
args['wechat'] = args['wechat'].strip()
if args['valid_from'] == '':
args['valid_from'] = '1970-01-01'
else:
args['valid_from'] = args['valid_from'].strip()
if args['valid_to'] == '':
args['valid_to'] = '1970-01-01'
else:
args['valid_to'] = args['valid_to'].strip()
args['desc'] = args['desc'].strip()
except:
return self.write_json(TPE_PARAM)
if len(args['username']) == 0:
return self.write_json(TPE_PARAM)
if args['id'] == -1:
args['password'] = tp_gen_password(8)
err, _ = user.create_user(self, args)

View File

@ -166,6 +166,7 @@ def get_accounts(sql_filter, sql_order, sql_limit, sql_restrict, sql_exclude):
s = SQL(db)
# s.select_from('acc', ['id', 'host_id', 'host_ip', 'router_ip', 'router_port', 'username', 'protocol_type', 'auth_type', 'state'], alt_name='a')
s.select_from('acc', ['id', 'host_id', 'username', 'protocol_type', 'auth_type', 'state', 'username_prompt', 'password_prompt'], alt_name='a')
s.left_join('host', ['name', 'desc'], join_on='h.id=a.host_id', alt_name='h', out_map={'name': 'host_name'})
str_where = ''
_where = list()
@ -189,7 +190,7 @@ def get_accounts(sql_filter, sql_order, sql_limit, sql_restrict, sql_exclude):
if len(sql_filter) > 0:
for k in sql_filter:
if k == 'search':
_where.append('(a.username LIKE "%{filter}%" OR a.host_ip LIKE "%{filter}%" OR a.router_ip LIKE "%{filter}%")'.format(filter=sql_filter[k]))
_where.append('(a.username LIKE "%{filter}%" OR a.host_ip LIKE "%{filter}%" OR a.router_ip LIKE "%{filter}%" OR h.name LIKE "%{filter}%" OR h.desc LIKE "%{filter}%")'.format(filter=sql_filter[k]))
# _where.append('(a.username LIKE "%{filter}%")'.format(filter=sql_filter[k]))
if len(_where) > 0:

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
import time,datetime
from app.base.configs import tp_cfg
from app.base.db import get_db, SQL
from app.base.logger import log
@ -38,7 +38,7 @@ def get_by_username(username):
s.select_from('user',
['id', 'type', 'auth_type', 'username', 'surname', 'ldap_dn', 'password', 'oath_secret', 'role_id',
'state', 'fail_count', 'lock_time', 'email', 'create_time', 'last_login', 'last_ip', 'last_chpass',
'mobile', 'qq', 'wechat', 'desc'], alt_name='u')
'mobile', 'qq', 'wechat', 'valid_from', 'valid_to', 'desc'], alt_name='u')
s.left_join('role', ['name', 'privilege'], join_on='r.id=u.role_id', alt_name='r', out_map={'name': 'role'})
s.where('u.username="{}"'.format(username))
err = s.query()
@ -57,7 +57,9 @@ def get_by_username(username):
def login(handler, username, password=None, oath_code=None, check_bind_oath=False):
sys_cfg = tp_cfg().sys
msg = ''
current_unix_time = int(time.mktime(datetime.datetime.now().timetuple()))
# log.e('current:',current_unix_time,'validfrom:', user_info['valid_from'])
err, user_info = get_by_username(username)
if err != TPE_OK:
return err, None, msg
@ -88,6 +90,10 @@ def login(handler, username, password=None, oath_code=None, check_bind_oath=Fals
msg = '登录失败,用户状态异常'
syslog.sys_log(user_info, handler.request.remote_ip, TPE_FAILED, msg)
return TPE_FAILED, None, msg
elif current_unix_time < user_info['valid_from'] or (current_unix_time > user_info['valid_to'] and user_info['valid_to'] != 0):
msg = '登录失败,用户已过期'
syslog.sys_log(user_info, handler.request.remote_ip, TPE_FAILED, msg)
return TPE_FAILED, None, msg
err_msg = ''
if password is not None:
@ -172,7 +178,7 @@ def login(handler, username, password=None, oath_code=None, check_bind_oath=Fals
def get_users(sql_filter, sql_order, sql_limit, sql_restrict, sql_exclude):
dbtp = get_db().table_prefix
s = SQL(get_db())
s.select_from('user', ['id', 'type', 'auth_type', 'username', 'surname', 'role_id', 'state', 'email', 'last_login'],
s.select_from('user', ['id', 'type', 'auth_type', 'username', 'surname', 'role_id', 'state', 'email', 'last_login', 'valid_from', 'valid_to'],
alt_name='u')
s.left_join('role', ['name', 'privilege'], join_on='r.id=u.role_id', alt_name='r', out_map={'name': 'role'})
@ -353,14 +359,15 @@ def create_user(handler, user):
sql = 'INSERT INTO `{}user` (' \
'`role_id`, `username`, `surname`, `type`, `ldap_dn`, `auth_type`, `password`, `state`, ' \
'`email`, `creator_id`, `create_time`, `last_login`, `last_chpass`, `desc`' \
'`email`, `creator_id`, `create_time`, `last_login`, `last_chpass`, `valid_from`, `valid_to`, `desc`' \
') VALUES (' \
'{role}, "{username}", "{surname}", {user_type}, "{ldap_dn}", {auth_type}, "{password}", {state}, ' \
'"{email}", {creator_id}, {create_time}, {last_login}, {last_chpass}, "{desc}");' \
'"{email}", {creator_id}, {create_time}, {last_login}, {last_chpass}, unix_timestamp("{valid_from}"), '\
'unix_timestamp("{valid_to}"), "{desc}");' \
''.format(db.table_prefix, role=user['role'], username=user['username'], surname=user['surname'],
user_type=user['type'], ldap_dn=user['ldap_dn'], auth_type=user['auth_type'], password=_password,
state=TP_STATE_NORMAL, email=user['email'], creator_id=operator['id'], create_time=_time_now,
last_login=0, last_chpass=_time_now, desc=user['desc'])
last_login=0, last_chpass=_time_now, valid_from=user['valid_from'], valid_to=user['valid_to'], desc=user['desc'])
db_ret = db.exec(sql)
if not db_ret:
return TPE_DATABASE, 0
@ -400,12 +407,12 @@ def update_user(handler, args):
sql = 'UPDATE `{}user` SET ' \
'`username`="{username}", `surname`="{surname}", `auth_type`={auth_type}, ' \
'`role_id`={role}, `email`="{email}", `mobile`="{mobile}", `qq`="{qq}", ' \
'`wechat`="{wechat}", `desc`="{desc}" WHERE `id`={user_id};' \
'`wechat`="{wechat}", `valid_from`=unix_timestamp("{valid_from}"), `valid_to`=unix_timestamp("{valid_to}"), '\
'`desc`="{desc}" WHERE `id`={user_id};' \
''.format(db.table_prefix,
username=args['username'], surname=args['surname'], auth_type=args['auth_type'], role=args['role'],
email=args['email'],
mobile=args['mobile'], qq=args['qq'], wechat=args['wechat'], desc=args['desc'],
user_id=args['id']
email=args['email'], mobile=args['mobile'], qq=args['qq'], wechat=args['wechat'],
valid_from=args['valid_from'], valid_to=args['valid_to'], desc=args['desc'], user_id=args['id']
)
db_ret = db.exec(sql)
if not db_ret: