diff --git a/server/www/teleport/static/js/tp-assist.js b/server/www/teleport/static/js/tp-assist.js
index a38a674..ce9410a 100644
--- a/server/www/teleport/static/js/tp-assist.js
+++ b/server/www/teleport/static/js/tp-assist.js
@@ -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助手,请 下载最新版TELEPORT助手安装包 并安装。一旦运行了TELEPORT助手,即可刷新页面,重新进行远程连接。');
+ $assist.dom.msg_box_desc.html('如果您尚未运行TELEPORT助手,请 下载最新版TELEPORT助手安装包 并安装。一旦运行了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('请 下载最新版TELEPORT助手安装包 并安装。一旦升级了TELEPORT助手,即可刷新页面,重新进行远程连接。');
+ $assist.dom.msg_box_desc.html('请 下载最新版TELEPORT助手安装包 并安装。一旦升级了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);
diff --git a/server/www/teleport/static/js/user/user-list.js b/server/www/teleport/static/js/user/user-list.js
index cd8d6ad..2208c9e 100755
--- a/server/www/teleport/static/js/user/user-list.js
+++ b/server/www/teleport/static/js/user/user-list.js
@@ -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('
' + role.name + '');
});
_ret.push('');
+ 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) {
diff --git a/server/www/teleport/view/user/user-list.mako b/server/www/teleport/view/user/user-list.mako
index 8a5a02b..40ab30f 100644
--- a/server/www/teleport/view/user/user-list.mako
+++ b/server/www/teleport/view/user/user-list.mako
@@ -8,6 +8,7 @@
<%block name="extend_js_file">
+
%block>
<%block name="embed_js">
@@ -230,6 +231,25 @@
+
+
+
diff --git a/server/www/teleport/webroot/app/controller/user.py b/server/www/teleport/webroot/app/controller/user.py
index 6200873..5965293 100755
--- a/server/www/teleport/webroot/app/controller/user.py
+++ b/server/www/teleport/webroot/app/controller/user.py
@@ -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)
diff --git a/server/www/teleport/webroot/app/model/account.py b/server/www/teleport/webroot/app/model/account.py
index 3cb22b5..be11035 100644
--- a/server/www/teleport/webroot/app/model/account.py
+++ b/server/www/teleport/webroot/app/model/account.py
@@ -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:
diff --git a/server/www/teleport/webroot/app/model/user.py b/server/www/teleport/webroot/app/model/user.py
index b3688ce..9bc45e1 100755
--- a/server/www/teleport/webroot/app/model/user.py
+++ b/server/www/teleport/webroot/app/model/user.py
@@ -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: