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 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: