Merge 2ba6b59359
into ce112adc87
commit
4423490b89
|
@ -21,6 +21,7 @@ $app.on_init = function (cb_stack) {
|
|||
$app.storage = $app.create_config_storage();
|
||||
cb_stack.add($app.storage.init);
|
||||
|
||||
$app.systime = $app.create_config_systime();
|
||||
cb_stack.exec();
|
||||
};
|
||||
|
||||
|
@ -769,3 +770,76 @@ $app.create_config_storage = function () {
|
|||
|
||||
return _sto;
|
||||
};
|
||||
|
||||
$app.create_config_systime = function () {
|
||||
var _st = {};
|
||||
|
||||
_st.dom = {
|
||||
tp_time: $('#system-time'),
|
||||
sys_data_set: $("#system-data-set"),
|
||||
sys_time_set: $("#system-time-set"),
|
||||
btn_sys_time_save: $('#btn-system-time-save')
|
||||
};
|
||||
|
||||
$app.sys_time = 0;
|
||||
|
||||
_st.init = function (cb_stack) {
|
||||
cb_stack.exec();
|
||||
};
|
||||
|
||||
// 获取服务器时间
|
||||
_st.sync_tp_time = function () {
|
||||
var data_str;
|
||||
$tp.ajax_post_json('/system/get-time', {},
|
||||
function (ret) {
|
||||
if (ret.code === TPE_OK) {
|
||||
_st.tp_time = tp_utc2local(ret.data);
|
||||
_st.show_tp_time();
|
||||
// 引用一下当前系统时间,因为一般只是微调
|
||||
data_str = tp_format_datetime(_st.tp_time).split(" ");
|
||||
_st.dom.sys_data_set.val(data_str[0]);
|
||||
_st.dom.sys_time_set.val(data_str[1]);
|
||||
}
|
||||
},
|
||||
function () {
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
_st.sync_tp_time();
|
||||
|
||||
_st.show_tp_time = function () {
|
||||
if (_st.tp_time === 0)
|
||||
return;
|
||||
_st.dom.tp_time.text(tp_format_datetime(_st.tp_time));
|
||||
_st.tp_time += 1;
|
||||
};
|
||||
|
||||
setInterval(_st.show_tp_time, 1000);
|
||||
// 每五分钟同步一次服务器时间,避免长时间误差积累导致显示不正确
|
||||
setInterval(_st.sync_tp_time, 1000 * 60 * 5);
|
||||
|
||||
_st.dom.btn_sys_time_save.click(function () {
|
||||
var nDate = _st.dom.sys_data_set.val();
|
||||
var nTime = _st.dom.sys_time_set.val();
|
||||
var full_time = nDate + " " + nTime;
|
||||
if (check_date_valid(full_time) == true) {
|
||||
$tp.ajax_post_json('/system/set-time', {settime: full_time},
|
||||
function (ret) {
|
||||
if (ret.code === TPE_OK) {
|
||||
//立即更新页面显示的时间
|
||||
_st.sync_tp_time();
|
||||
$tp.notify_success('系统时间更新成功!');
|
||||
} else {
|
||||
$tp.notify_error('系统时间更新失败:' + tp_error_msg(ret.code, ret.message));
|
||||
}
|
||||
},
|
||||
function () {
|
||||
$tp.notify_error('网络故障,系统时间更新失败!');
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
return _st;
|
||||
};
|
||||
|
|
|
@ -387,3 +387,15 @@ function tp_check_strong_password(p) {
|
|||
|
||||
return !!((s & 1) && (s & 2) && (s & 4));
|
||||
}
|
||||
|
||||
//检查日期合法性
|
||||
function check_date_valid(date) {
|
||||
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
|
||||
var r = date.match(reg);
|
||||
if(r == null) {
|
||||
$tp.notify_error("输入格式不正确!" + date);
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -22,6 +22,7 @@
|
|||
<li><a href="#tab-session" 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-systime" data-toggle="tab">时间</a></li>
|
||||
## <li><a href="#tab-backup" data-toggle="tab">备份</a></li>
|
||||
</ul>
|
||||
|
||||
|
@ -360,6 +361,24 @@
|
|||
## <button id="btn-clear-storage" class="btn btn-sm btn-danger"><i class="fa fa-edit fa-fw"></i> 立即清理</button>
|
||||
</div>
|
||||
|
||||
<!-- panel for system time config -->
|
||||
<div class="tab-pane" id="tab-systime">
|
||||
<div class="alert alert-warning">
|
||||
注意:当系统时间偏离过多时,动态身份认证器将失效,可以在这里设置系统时间。请谨慎设置!
|
||||
</div>
|
||||
<div class="alert alert-info">
|
||||
当前服务器系统时间:<span id="system-time">-</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="date" id="system-data-set" />
|
||||
<input type="time" id="system-time-set" step="1" />
|
||||
<input type="button" id="btn-system-time-save" value="保存系统时间" />
|
||||
</div>
|
||||
<hr/>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- panel for backup config -->
|
||||
## <div class="tab-pane" id="tab-backup">
|
||||
## <div class="alert alert-danger">备份功能尚未实现</div>
|
||||
|
|
|
@ -255,6 +255,8 @@ controllers = [
|
|||
#
|
||||
# - [json] 获取服务器时间
|
||||
(r'/system/get-time', system.DoGetTimeHandler),
|
||||
# - [json] 设置服务器时间
|
||||
(r'/system/set-time', system.DoSetTimeHandler),
|
||||
# - [json] 重建授权映射
|
||||
(r'/system/rebuild-ops-auz-map', system.DoRebuildOpsAuzMapHandler),
|
||||
(r'/system/rebuild-audit-auz-map', system.DoRebuildAuditAuzMapHandler),
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
import datetime
|
||||
import json
|
||||
import shutil
|
||||
import time
|
||||
import os
|
||||
|
||||
import app.model.system as system_model
|
||||
import tornado.gen
|
||||
|
@ -26,6 +28,39 @@ class DoGetTimeHandler(TPBaseJsonHandler):
|
|||
time_now = int(datetime.datetime.utcnow().timestamp())
|
||||
self.write_json(TPE_OK, data=time_now)
|
||||
|
||||
class DoSetTimeHandler(TPBaseJsonHandler):
|
||||
def post(self):
|
||||
ret = self.check_privilege(TP_PRIVILEGE_SYS_CONFIG)
|
||||
if ret != TPE_OK:
|
||||
return
|
||||
|
||||
args = self.get_argument('args', None)
|
||||
if args is None:
|
||||
return self.write_json(TPE_PARAM)
|
||||
try:
|
||||
args = json.loads(args)
|
||||
except:
|
||||
return self.write_json(TPE_JSON_FORMAT)
|
||||
|
||||
try:
|
||||
set_time = args['settime']
|
||||
except:
|
||||
return self.write_json(TPE_PARAM)
|
||||
|
||||
try:
|
||||
#这里在文件头必须import time,不然tornado会报错
|
||||
time.strptime(set_time, "%Y-%m-%d %H:%M:%S")
|
||||
except:
|
||||
return False
|
||||
|
||||
cmd = 'date -s \"{}\" > /dev/null'.format(set_time)
|
||||
cmd_ret = os.system(cmd)
|
||||
if cmd_ret != 0:
|
||||
syslog.sys_log(self.get_current_user(), self.request.remote_ip, TPE_FAILED, "系统时间修改失败,错误码{}".format(cmd_ret))
|
||||
return self.write_json(TPE_FAILED, "修改系统时间出错!")
|
||||
|
||||
syslog.sys_log(self.get_current_user(), self.request.remote_ip, TPE_OK, "系统时间修改成功,当前时间为[{}]".format(set_time))
|
||||
return self.write_json(TPE_OK)
|
||||
|
||||
class ConfigHandler(TPBaseHandler):
|
||||
@tornado.gen.coroutine
|
||||
|
|
|
@ -608,9 +608,12 @@ class DoUpdateUserHandler(TPBaseJsonHandler):
|
|||
subject='用户密码函'
|
||||
)
|
||||
if err != TPE_OK:
|
||||
return self.write_json(TPE_OK, '用户账号创建成功,但发送密码函失败:{}'.format(msg))
|
||||
return self.write_json(TPE_OK, '<font color="#e33b3b">用户账号创建成功,但发送密码函失败:{}</font>'.format(msg))
|
||||
else:
|
||||
return self.write_json(TPE_OK)
|
||||
#在没配置邮箱得情况下给出错误提示
|
||||
else:
|
||||
return self.write_json(TPE_OK, '<font color="#e33b3b">用户账号创建成功,但发送密码函失败。请检查邮件配置。</font>')
|
||||
else:
|
||||
return self.write_json(err)
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue