pull/105/head
Apex Liu 2017-11-13 19:01:34 +08:00
parent 7e1f6705e7
commit 367fafdd67
8 changed files with 122 additions and 19 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -6,6 +6,9 @@ $app.on_init = function (cb_stack) {
$app.dlg_result = $app.create_dlg_result();
// 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();
cb_stack.add($app.smtp.init);
@ -18,6 +21,71 @@ $app.on_init = function (cb_stack) {
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 () {
var _dlg = {};
@ -27,7 +95,7 @@ $app.create_dlg_result = function () {
msg: $('#dlg-result-msg')
};
_dlg.show = function(title, msg) {
_dlg.show = function (title, msg) {
_dlg.dom.title.text(title);
_dlg.dom.msg.html(msg);
_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_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('您已经修改了设置,请先保存设置,再进行清理!');
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('根据设置,没有需要清理的内容!');
return;
}
@ -502,8 +570,8 @@ $app.create_config_storage = function () {
$tp.notify_success('清理存储空间成功!');
var msg = [];
for(var i = 0; i < ret.data.length; ++i) {
msg.push('<p>'+ret.data[i]+'</p>');
for (var i = 0; i < ret.data.length; ++i) {
msg.push('<p>' + ret.data[i] + '</p>');
}
$app.dlg_result.show('清理存储空间', msg.join(''));

View File

@ -16,7 +16,7 @@
td {
border-top: 1px dotted #ddd;
padding: 5px 10px;
padding: 5px 5px;
vertical-align: top;
&.key {
text-align: right;
@ -27,10 +27,12 @@
text-align: left;
//padding-left:10px;
//font-weight: bold;
font-family: @font-family-mono;
color: #767676;
}
.error {
color: #cc3632;
font-weight: bold;
}
}

View File

@ -17,15 +17,25 @@
<div class="page-content-inner">
<div class="box box-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-storage" data-toggle="tab">存储</a></li>
## <li><a href="#tab-backup" data-toggle="tab">备份</a></li>
</ul>
<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 -->
<div class="tab-pane active" id="tab-security">
<div class="tab-pane" id="tab-security">
<table class="table table-config-list">
<tr>
<td colspan="2" class="title">密码策略</td>
@ -115,19 +125,19 @@
<div class="tab-pane" id="tab-smtp">
<table class="table table-info-list">
<tr>
<td class="key">SMTP服务器</td>
<td class="key">SMTP服务器</td>
<td class="value"><span id="smtp-server-info"></span></td>
</tr>
<tr>
<td class="key">SMTP 端口</td>
<td class="key">SMTP 端口</td>
<td class="value"><span id="smtp-port-info"></span></td>
</tr>
<tr>
<td class="key">SSL模式</td>
<td class="key">SSL模式</td>
<td class="value"><span id="smtp-ssl-info"></span></td>
</tr>
<tr>
<td class="key">发件人邮箱</td>
<td class="key">发件人邮箱</td>
<td class="value"><span id="smtp-sender-info"></span></td>
</tr>
</table>

View File

@ -312,7 +312,7 @@ class AppConfig(BaseAppConfig):
def _on_get_save_info(self):
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']}
]
@ -348,9 +348,9 @@ class AppConfig(BaseAppConfig):
if _tmp_str is not None:
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:
self.set_kv('common::base-server-rpc', _tmp_str)
self.set_kv('common::core-server-rpc', _tmp_str)
_sec = cfg_parser['database']

View File

@ -122,13 +122,19 @@ class DoLoginHandler(TPBaseJsonHandler):
err_msg = ''
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']):
err, is_locked = user.update_fail_count(self, user_info)
if is_locked:
err_msg = '用户被临时锁定!'
syslog.sys_log(user_info, self.request.remote_ip, TPE_USER_AUTH, '登录失败,密码错误!{}'.format(err_msg))
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):
err, is_locked = user.update_fail_count(self, user_info)
if is_locked:

View File

@ -6,11 +6,13 @@ import shutil
import app.model.system as system_model
import tornado.gen
from app.app_ver import TP_SERVER_VER
from app.base import mail
from app.base.configs import get_cfg
from app.base.controller import TPBaseHandler, TPBaseJsonHandler
from app.base.logger import *
from app.const import *
from app.base.db import get_db
from app.model import syslog
from app.model import record
from app.base.core_server import core_service_async_post_http
@ -46,11 +48,26 @@ class ConfigHandler(TPBaseHandler):
else:
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 = {
'total_size': total_size,
'free_size': free_size,
'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))