mirror of https://github.com/tp4a/teleport
temp.
parent
7e1f6705e7
commit
367fafdd67
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -6,6 +6,9 @@ $app.on_init = function (cb_stack) {
|
||||||
$app.dlg_result = $app.create_dlg_result();
|
$app.dlg_result = $app.create_dlg_result();
|
||||||
// cb_stack.add($app.dlg_result.init);
|
// cb_stack.add($app.dlg_result.init);
|
||||||
|
|
||||||
|
$app.info = $app.create_info_table();
|
||||||
|
cb_stack.add($app.info.init);
|
||||||
|
|
||||||
$app.smtp = $app.create_config_smtp();
|
$app.smtp = $app.create_config_smtp();
|
||||||
cb_stack.add($app.smtp.init);
|
cb_stack.add($app.smtp.init);
|
||||||
|
|
||||||
|
@ -18,6 +21,71 @@ $app.on_init = function (cb_stack) {
|
||||||
cb_stack.exec();
|
cb_stack.exec();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$app.create_info_table = function () {
|
||||||
|
var _info = {};
|
||||||
|
|
||||||
|
_info.dom = {
|
||||||
|
web_info: $('#web-info-kv'),
|
||||||
|
core_info: $('#core-info-kv')
|
||||||
|
};
|
||||||
|
|
||||||
|
_info.init = function () {
|
||||||
|
var h = [];
|
||||||
|
|
||||||
|
h.push(_info._make_info('WEB服务版本', $app.options.web_cfg.version));
|
||||||
|
|
||||||
|
if ($app.options.web_cfg.db.type === DB_TYPE_SQLITE) {
|
||||||
|
h.push(_info._make_info('数据库类型', 'SQLite'));
|
||||||
|
h.push(_info._make_info('数据库文件', $app.options.web_cfg.db.sqlite_file));
|
||||||
|
} else if ($app.options.web_cfg.db.type === DB_TYPE_MYSQL) {
|
||||||
|
h.push(_info._make_info('数据库类型', 'MySQL'));
|
||||||
|
h.push(_info._make_info('mysql-host', $app.options.web_cfg.db.mysql_host));
|
||||||
|
h.push(_info._make_info('mysql-port', $app.options.web_cfg.db.mysql_port));
|
||||||
|
h.push(_info._make_info('mysql-db', $app.options.web_cfg.db.mysql_db));
|
||||||
|
h.push(_info._make_info('mysql-user', $app.options.web_cfg.db.mysql_user));
|
||||||
|
} else {
|
||||||
|
h.push(_info._make_info('数据库类型', '未知'));
|
||||||
|
}
|
||||||
|
|
||||||
|
h.push(_info._make_info('与核心服务通讯地址', $app.options.web_cfg.core_server_rpc));
|
||||||
|
|
||||||
|
_info.dom.web_info.append(h.join(''));
|
||||||
|
|
||||||
|
h = [];
|
||||||
|
if (!$app.options.core_cfg.detected) {
|
||||||
|
h.push(_info._make_info('核心服务信息', '<span class="error">无法获取,未能连接到核心服务</span>'));
|
||||||
|
} else {
|
||||||
|
h.push(_info._make_info('核心服务版本', $app.options.core_cfg.version));
|
||||||
|
h.push(_info._make_info('与WEB服务通讯地址', $app.options.core_cfg.web_server_rpc));
|
||||||
|
h.push(_info._make_protocol_info('RDP 端口', $app.options.core_cfg.rdp));
|
||||||
|
h.push(_info._make_protocol_info('SSH 端口', $app.options.core_cfg.ssh));
|
||||||
|
// h.push(_info._make_protocol_info('TELNET 端口', $app.options.core_cfg.telnet));
|
||||||
|
h.push(_info._make_info('录像文件路径', $app.options.core_cfg.replay_path));
|
||||||
|
}
|
||||||
|
|
||||||
|
_info.dom.core_info.append(h.join(''));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
_info._make_info = function (k, v) {
|
||||||
|
if (_.isUndefined(v))
|
||||||
|
v = '<span class="error">未能检测到</span>';
|
||||||
|
return '<tr><td class="key">' + k + ':</td><td class="value">' + v + '</td></tr>';
|
||||||
|
};
|
||||||
|
_info._make_protocol_info = function (name, p) {
|
||||||
|
if (_.isUndefined(p))
|
||||||
|
return _info._make_info(name, '未能检测到');
|
||||||
|
var val = p.port;
|
||||||
|
if (!p.enable) {
|
||||||
|
val = '<span class="disabled">' + val + '(未启用)</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return _info._make_info(name, val);
|
||||||
|
};
|
||||||
|
|
||||||
|
return _info;
|
||||||
|
};
|
||||||
|
|
||||||
$app.create_dlg_result = function () {
|
$app.create_dlg_result = function () {
|
||||||
var _dlg = {};
|
var _dlg = {};
|
||||||
|
|
||||||
|
@ -27,7 +95,7 @@ $app.create_dlg_result = function () {
|
||||||
msg: $('#dlg-result-msg')
|
msg: $('#dlg-result-msg')
|
||||||
};
|
};
|
||||||
|
|
||||||
_dlg.show = function(title, msg) {
|
_dlg.show = function (title, msg) {
|
||||||
_dlg.dom.title.text(title);
|
_dlg.dom.title.text(title);
|
||||||
_dlg.dom.msg.html(msg);
|
_dlg.dom.msg.html(msg);
|
||||||
_dlg.dom.dlg.modal();
|
_dlg.dom.dlg.modal();
|
||||||
|
@ -484,11 +552,11 @@ $app.create_config_storage = function () {
|
||||||
var _keep_log = parseInt(_sto.dom.input_keep_log.val());
|
var _keep_log = parseInt(_sto.dom.input_keep_log.val());
|
||||||
var _keep_record = parseInt(_sto.dom.input_keep_record.val());
|
var _keep_record = parseInt(_sto.dom.input_keep_record.val());
|
||||||
|
|
||||||
if($app.options.sys_cfg.storage.keep_log !== _keep_log || $app.options.sys_cfg.storage.keep_record !== _keep_record) {
|
if ($app.options.sys_cfg.storage.keep_log !== _keep_log || $app.options.sys_cfg.storage.keep_record !== _keep_record) {
|
||||||
$tp.notify_error('您已经修改了设置,请先保存设置,再进行清理!');
|
$tp.notify_error('您已经修改了设置,请先保存设置,再进行清理!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if($app.options.sys_cfg.storage.keep_log === 0 && $app.options.sys_cfg.storage.keep_record === 0) {
|
if ($app.options.sys_cfg.storage.keep_log === 0 && $app.options.sys_cfg.storage.keep_record === 0) {
|
||||||
$tp.notify_error('根据设置,没有需要清理的内容!');
|
$tp.notify_error('根据设置,没有需要清理的内容!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -502,8 +570,8 @@ $app.create_config_storage = function () {
|
||||||
$tp.notify_success('清理存储空间成功!');
|
$tp.notify_success('清理存储空间成功!');
|
||||||
|
|
||||||
var msg = [];
|
var msg = [];
|
||||||
for(var i = 0; i < ret.data.length; ++i) {
|
for (var i = 0; i < ret.data.length; ++i) {
|
||||||
msg.push('<p>'+ret.data[i]+'</p>');
|
msg.push('<p>' + ret.data[i] + '</p>');
|
||||||
}
|
}
|
||||||
|
|
||||||
$app.dlg_result.show('清理存储空间', msg.join(''));
|
$app.dlg_result.show('清理存储空间', msg.join(''));
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
td {
|
td {
|
||||||
border-top: 1px dotted #ddd;
|
border-top: 1px dotted #ddd;
|
||||||
padding: 5px 10px;
|
padding: 5px 5px;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
&.key {
|
&.key {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
@ -27,10 +27,12 @@
|
||||||
text-align: left;
|
text-align: left;
|
||||||
//padding-left:10px;
|
//padding-left:10px;
|
||||||
//font-weight: bold;
|
//font-weight: bold;
|
||||||
|
font-family: @font-family-mono;
|
||||||
color: #767676;
|
color: #767676;
|
||||||
}
|
}
|
||||||
.error {
|
.error {
|
||||||
color: #cc3632;
|
color: #cc3632;
|
||||||
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,15 +17,25 @@
|
||||||
<div class="page-content-inner">
|
<div class="page-content-inner">
|
||||||
<div class="box box-nav-tabs">
|
<div class="box box-nav-tabs">
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
<li class="active"><a href="#tab-security" data-toggle="tab">安全</a></li>
|
<li class="active"><a href="#tab-info" data-toggle="tab">基本信息</a></li>
|
||||||
|
<li><a href="#tab-security" data-toggle="tab">安全</a></li>
|
||||||
<li><a href="#tab-smtp" data-toggle="tab">邮件系统</a></li>
|
<li><a href="#tab-smtp" data-toggle="tab">邮件系统</a></li>
|
||||||
<li><a href="#tab-storage" data-toggle="tab">存储</a></li>
|
<li><a href="#tab-storage" data-toggle="tab">存储</a></li>
|
||||||
## <li><a href="#tab-backup" data-toggle="tab">备份</a></li>
|
## <li><a href="#tab-backup" data-toggle="tab">备份</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
|
<!-- panel for global information -->
|
||||||
|
<div class="tab-pane active" id="tab-info">
|
||||||
|
<h4>WEB服务配置</h4>
|
||||||
|
<table id="web-info-kv" class="table table-info-list"></table>
|
||||||
|
<hr/>
|
||||||
|
<h4>核心服务配置</h4>
|
||||||
|
<table id="core-info-kv" class="table table-info-list"></table>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- panel for security config -->
|
<!-- panel for security config -->
|
||||||
<div class="tab-pane active" id="tab-security">
|
<div class="tab-pane" id="tab-security">
|
||||||
<table class="table table-config-list">
|
<table class="table table-config-list">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2" class="title">密码策略</td>
|
<td colspan="2" class="title">密码策略</td>
|
||||||
|
@ -115,19 +125,19 @@
|
||||||
<div class="tab-pane" id="tab-smtp">
|
<div class="tab-pane" id="tab-smtp">
|
||||||
<table class="table table-info-list">
|
<table class="table table-info-list">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="key">SMTP服务器</td>
|
<td class="key">SMTP服务器:</td>
|
||||||
<td class="value"><span id="smtp-server-info"></span></td>
|
<td class="value"><span id="smtp-server-info"></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="key">SMTP 端口</td>
|
<td class="key">SMTP 端口:</td>
|
||||||
<td class="value"><span id="smtp-port-info"></span></td>
|
<td class="value"><span id="smtp-port-info"></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="key">SSL模式</td>
|
<td class="key">SSL模式:</td>
|
||||||
<td class="value"><span id="smtp-ssl-info"></span></td>
|
<td class="value"><span id="smtp-ssl-info"></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="key">发件人邮箱</td>
|
<td class="key">发件人邮箱:</td>
|
||||||
<td class="value"><span id="smtp-sender-info"></span></td>
|
<td class="value"><span id="smtp-sender-info"></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -312,7 +312,7 @@ class AppConfig(BaseAppConfig):
|
||||||
|
|
||||||
def _on_get_save_info(self):
|
def _on_get_save_info(self):
|
||||||
return [
|
return [
|
||||||
{'common': ['ip', 'port', 'log-file', 'log-level', 'debug-mode', 'base-server-rpc']},
|
{'common': ['ip', 'port', 'log-file', 'log-level', 'debug-mode', 'core-server-rpc']},
|
||||||
{'database': ['type', 'sqlite-file', 'mysql-host', 'mysql-port', 'mysql-db', 'mysql-prefix', 'mysql-user', 'mysql-password']}
|
{'database': ['type', 'sqlite-file', 'mysql-host', 'mysql-port', 'mysql-db', 'mysql-prefix', 'mysql-user', 'mysql-password']}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -348,9 +348,9 @@ class AppConfig(BaseAppConfig):
|
||||||
if _tmp_str is not None:
|
if _tmp_str is not None:
|
||||||
self.set_kv('common::log-file', _tmp_str)
|
self.set_kv('common::log-file', _tmp_str)
|
||||||
|
|
||||||
_tmp_str = _sec.get('base-server-rpc', None)
|
_tmp_str = _sec.get('core-server-rpc', None)
|
||||||
if _tmp_str is not None:
|
if _tmp_str is not None:
|
||||||
self.set_kv('common::base-server-rpc', _tmp_str)
|
self.set_kv('common::core-server-rpc', _tmp_str)
|
||||||
|
|
||||||
_sec = cfg_parser['database']
|
_sec = cfg_parser['database']
|
||||||
|
|
||||||
|
|
|
@ -122,13 +122,19 @@ class DoLoginHandler(TPBaseJsonHandler):
|
||||||
|
|
||||||
err_msg = ''
|
err_msg = ''
|
||||||
if login_type in [TP_LOGIN_AUTH_USERNAME_PASSWORD, TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA, TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH]:
|
if login_type in [TP_LOGIN_AUTH_USERNAME_PASSWORD, TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA, TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH]:
|
||||||
|
# 如果系统配置了密码有效期,则检查用户的密码是否失效
|
||||||
|
if sys_cfg.password.timeout != 0:
|
||||||
|
pass
|
||||||
|
|
||||||
if not tp_password_verify(password, user_info['password']):
|
if not tp_password_verify(password, user_info['password']):
|
||||||
err, is_locked = user.update_fail_count(self, user_info)
|
err, is_locked = user.update_fail_count(self, user_info)
|
||||||
if is_locked:
|
if is_locked:
|
||||||
err_msg = '用户被临时锁定!'
|
err_msg = '用户被临时锁定!'
|
||||||
syslog.sys_log(user_info, self.request.remote_ip, TPE_USER_AUTH, '登录失败,密码错误!{}'.format(err_msg))
|
syslog.sys_log(user_info, self.request.remote_ip, TPE_USER_AUTH, '登录失败,密码错误!{}'.format(err_msg))
|
||||||
return self.write_json(TPE_USER_AUTH)
|
return self.write_json(TPE_USER_AUTH)
|
||||||
elif login_type in [TP_LOGIN_AUTH_USERNAME_OATH, TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH]:
|
|
||||||
|
if login_type in [TP_LOGIN_AUTH_USERNAME_OATH, TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH]:
|
||||||
|
# use oath
|
||||||
if not tp_oath_verify_code(user_info['oath_secret'], oath):
|
if not tp_oath_verify_code(user_info['oath_secret'], oath):
|
||||||
err, is_locked = user.update_fail_count(self, user_info)
|
err, is_locked = user.update_fail_count(self, user_info)
|
||||||
if is_locked:
|
if is_locked:
|
||||||
|
|
|
@ -6,11 +6,13 @@ import shutil
|
||||||
|
|
||||||
import app.model.system as system_model
|
import app.model.system as system_model
|
||||||
import tornado.gen
|
import tornado.gen
|
||||||
|
from app.app_ver import TP_SERVER_VER
|
||||||
from app.base import mail
|
from app.base import mail
|
||||||
from app.base.configs import get_cfg
|
from app.base.configs import get_cfg
|
||||||
from app.base.controller import TPBaseHandler, TPBaseJsonHandler
|
from app.base.controller import TPBaseHandler, TPBaseJsonHandler
|
||||||
from app.base.logger import *
|
from app.base.logger import *
|
||||||
from app.const import *
|
from app.const import *
|
||||||
|
from app.base.db import get_db
|
||||||
from app.model import syslog
|
from app.model import syslog
|
||||||
from app.model import record
|
from app.model import record
|
||||||
from app.base.core_server import core_service_async_post_http
|
from app.base.core_server import core_service_async_post_http
|
||||||
|
@ -46,11 +48,26 @@ class ConfigHandler(TPBaseHandler):
|
||||||
else:
|
else:
|
||||||
total_size, _, free_size = shutil.disk_usage(get_cfg().core.replay_path)
|
total_size, _, free_size = shutil.disk_usage(get_cfg().core.replay_path)
|
||||||
|
|
||||||
|
_db = get_db()
|
||||||
|
db = {'type': _db.db_type}
|
||||||
|
if _db.db_type == _db.DB_TYPE_SQLITE:
|
||||||
|
db['sqlite_file'] = _db.sqlite_file
|
||||||
|
elif _db.db_type == _db.DB_TYPE_MYSQL:
|
||||||
|
db['mysql_host'] = _db.mysql_host
|
||||||
|
db['mysql_port'] = _db.mysql_port
|
||||||
|
db['mysql_db'] = _db.mysql_db
|
||||||
|
db['mysql_user'] = _db.mysql_user
|
||||||
|
|
||||||
param = {
|
param = {
|
||||||
'total_size': total_size,
|
'total_size': total_size,
|
||||||
'free_size': free_size,
|
'free_size': free_size,
|
||||||
'core_cfg': get_cfg().core,
|
'core_cfg': get_cfg().core,
|
||||||
'sys_cfg': get_cfg().sys
|
'sys_cfg': get_cfg().sys,
|
||||||
|
'web_cfg': {
|
||||||
|
'version': TP_SERVER_VER,
|
||||||
|
'core_server_rpc': get_cfg().common.core_server_rpc,
|
||||||
|
'db': db
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.render('system/config.mako', page_param=json.dumps(param))
|
self.render('system/config.mako', page_param=json.dumps(param))
|
||||||
|
|
Loading…
Reference in New Issue