mirror of https://github.com/tp4a/teleport
load/save security and SMTP settings of system configuration page.
parent
37f8fc8b6f
commit
e686a583de
|
@ -171,17 +171,21 @@ $app.create_config_smtp = function () {
|
|||
return;
|
||||
|
||||
_smtp.dom.btn_save.attr('disabled', 'disabled');
|
||||
$tp.ajax_post_json('/system/save-cfg-smtp',
|
||||
$tp.ajax_post_json('/system/save-cfg',
|
||||
{
|
||||
server: _server,
|
||||
port: _port,
|
||||
ssl: _ssl,
|
||||
sender: _sender,
|
||||
password: _password
|
||||
smtp: {
|
||||
server: _server,
|
||||
port: _port,
|
||||
ssl: _ssl,
|
||||
sender: _sender,
|
||||
password: _password
|
||||
}
|
||||
},
|
||||
function (ret) {
|
||||
_smtp.dom.btn_save.removeAttr('disabled');
|
||||
if (ret.code === TPE_OK) {
|
||||
$tp.notify_success('SMTP设置更新成功!');
|
||||
|
||||
_smtp.dom.input_password.val('');
|
||||
// 更新一下界面上显示的配置信息
|
||||
$app.options.sys_cfg.smtp.server = _server;
|
||||
|
@ -191,13 +195,14 @@ $app.create_config_smtp = function () {
|
|||
_smtp.update_dom($app.options.sys_cfg.smtp);
|
||||
|
||||
_smtp.dom.dlg_edit.modal('hide');
|
||||
|
||||
} else {
|
||||
$tp.notify_error(tp_error_msg(ret.code, ret.message));
|
||||
$tp.notify_error('SMTP设置更新失败:' + tp_error_msg(ret.code, ret.message));
|
||||
}
|
||||
},
|
||||
function () {
|
||||
_smtp.dom.btn_save.removeAttr('disabled');
|
||||
$tp.notify_error('网路故障,无法连接到服务器!');
|
||||
$tp.notify_error('网路故障,SMTP设置更新失败!');
|
||||
}
|
||||
);
|
||||
};
|
||||
|
@ -270,8 +275,87 @@ $app.create_config_sec = function () {
|
|||
_sec.dom.btn_auth_username_password_oath.addClass('tp-selected');
|
||||
};
|
||||
|
||||
_sec.on_btn_save = function() {
|
||||
_sec.on_btn_save = function () {
|
||||
var _password_allow_reset = _sec.dom.btn_password_allow_reset.hasClass('tp-selected');
|
||||
var _password_force_strong = _sec.dom.btn_password_force_strong.hasClass('tp-selected');
|
||||
var _password_timeout = parseInt(_sec.dom.input_password_timeout.val());
|
||||
|
||||
var _login_session_timeout = parseInt(_sec.dom.input_session_timeout.val());
|
||||
var _login_retry = parseInt(_sec.dom.input_login_retry.val());
|
||||
var _login_lock_timeout = parseInt(_sec.dom.input_lock_timeout.val());
|
||||
|
||||
var _login_auth = 0;
|
||||
if (_sec.dom.btn_auth_username_password.hasClass('tp-selected'))
|
||||
_login_auth |= TP_LOGIN_AUTH_USERNAME_PASSWORD;
|
||||
if (_sec.dom.btn_auth_username_password_captcha.hasClass('tp-selected'))
|
||||
_login_auth |= TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA;
|
||||
if (_sec.dom.btn_auth_username_oath.hasClass('tp-selected'))
|
||||
_login_auth |= TP_LOGIN_AUTH_USERNAME_OATH;
|
||||
if (_sec.dom.btn_auth_username_password_oath.hasClass('tp-selected'))
|
||||
_login_auth |= TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH;
|
||||
|
||||
if (_.isNaN(_password_timeout) || _password_timeout < 0 || _password_timeout > 180) {
|
||||
$tp.notify_error('密码有效期超出范围!');
|
||||
_sec.dom.input_password_timeout.focus();
|
||||
return;
|
||||
}
|
||||
if (_.isNaN(_login_session_timeout) || _login_session_timeout < 5 || _login_session_timeout > 1440) {
|
||||
$tp.notify_error('WEB会话超时超出范围!');
|
||||
_sec.dom.input_session_timeout.focus();
|
||||
return;
|
||||
}
|
||||
if (_.isNaN(_login_retry) || _login_retry < 0 || _login_retry > 10) {
|
||||
$tp.notify_error('密码尝试次数超出范围!');
|
||||
_sec.dom.input_login_retry.focus();
|
||||
return;
|
||||
}
|
||||
if (_.isNaN(_login_lock_timeout) || _login_lock_timeout < 0 || _login_lock_timeout > 9999) {
|
||||
$tp.notify_error('临时锁定时长超出范围!');
|
||||
_sec.dom.input_lock_timeout.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
_sec.dom.btn_save.attr('disabled', 'disabled');
|
||||
$tp.ajax_post_json('/system/save-cfg',
|
||||
{
|
||||
password: {
|
||||
allow_reset: _password_allow_reset,
|
||||
force_strong: _password_force_strong,
|
||||
timeout: _password_timeout
|
||||
},
|
||||
login: {
|
||||
session_timeout: _login_session_timeout,
|
||||
retry: _login_retry,
|
||||
lock_timeout: _login_lock_timeout,
|
||||
auth: _login_auth
|
||||
}
|
||||
},
|
||||
function (ret) {
|
||||
_sec.dom.btn_save.removeAttr('disabled');
|
||||
if (ret.code === TPE_OK) {
|
||||
$tp.notify_success('安全设置更新成功!');
|
||||
|
||||
// 更新一下界面上显示的配置信息
|
||||
$app.options.sys_cfg.password.allow_reset = _password_allow_reset;
|
||||
$app.options.sys_cfg.password.force_strong = _password_force_strong;
|
||||
$app.options.sys_cfg.password.timeout = _password_timeout;
|
||||
|
||||
$app.options.sys_cfg.login.session_timeout = _login_session_timeout;
|
||||
$app.options.sys_cfg.login.retry = _login_retry;
|
||||
$app.options.sys_cfg.login.lock_timeout = _login_lock_timeout;
|
||||
$app.options.sys_cfg.login.auth = _login_auth;
|
||||
|
||||
_sec.update_dom_password($app.options.sys_cfg.password);
|
||||
_sec.update_dom_login($app.options.sys_cfg.login);
|
||||
} else {
|
||||
$tp.notify_error('安全设置更新失败:' + tp_error_msg(ret.code, ret.message));
|
||||
}
|
||||
},
|
||||
function () {
|
||||
_sec.dom.btn_save.removeAttr('disabled');
|
||||
$tp.notify_error('网路故障,安全设置更新失败!');
|
||||
}
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<li class="active"><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>
|
||||
## <li><a href="#tab-backup" data-toggle="tab">备份</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
|
@ -107,7 +107,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<button id="btn-save-secure-config" class="btn btn-sm btn-primary"><i class="fa fa-edit fa-fw"></i> 保存安全设置</button>
|
||||
<button id="btn-save-secure-config" class="btn btn-sm btn-primary"><i class="fa fa-check-circle fa-fw"></i> 保存安全设置</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
@ -132,7 +132,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<button id="btn-edit-mail-config" class="btn btn-sm btn-primary"><i class="fa fa-edit fa-fw"></i> 设置发件服务器</button>
|
||||
<button id="btn-edit-mail-config" class="btn btn-sm btn-primary"><i class="fa fa-cog fa-fw"></i> 设置发件服务器</button>
|
||||
</div>
|
||||
|
||||
<!-- panel for storage config -->
|
||||
|
@ -145,7 +145,7 @@
|
|||
<tr>
|
||||
<td class="key">保留时间</td>
|
||||
<td class="value">
|
||||
<input type="text" value="0"/><span class="unit">天</span><span class="desc">30~180。仅保留指定天数的系统日志,为0则永久保留。默认为0。</span>
|
||||
<input id="storage-keep-log" type="text" value="0"/><span class="unit">天</span><span class="desc">30~180。仅保留指定天数的系统日志,为0则永久保留。默认为0。</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -158,55 +158,24 @@
|
|||
<tr>
|
||||
<td class="key">保留时间</td>
|
||||
<td class="value">
|
||||
<input type="text" value="0"/><span class="unit">天</span><span class="desc">30~180。仅保留指定天数的会话录像,为0则永久保留。默认为0。</span>
|
||||
<input id="storage-keep-record" type="text" value="0"/><span class="unit">天</span><span class="desc">30~180。仅保留指定天数的会话录像(以会话开始时间为准),为0则永久保留。默认为0。</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<button id="btn-save-storage-config" class="btn btn-sm btn-primary"><i class="fa fa-edit fa-fw"></i> 保存存储设置</button>
|
||||
<button id="btn-save-storage-config" class="btn btn-sm btn-danger"><i class="fa fa-edit fa-fw"></i> 立即清理</button>
|
||||
</div>
|
||||
|
||||
<!-- panel for backup config -->
|
||||
<div class="tab-pane" id="tab-backup">
|
||||
<div class="alert alert-danger">备份功能尚未实现</div>
|
||||
|
||||
<table class="table table-config-list">
|
||||
<tr>
|
||||
<td colspan="2" class="title">数据库备份</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="key">备份范围</td>
|
||||
<td class="value">
|
||||
<div id="sec-allow-reset-password" class="tp-checkbox tp-editable">包括系统日志</div>
|
||||
<td colspan="2" class="title">
|
||||
<hr class="hr-sm"/>
|
||||
自动清理
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="key"></td>
|
||||
<td class="key">时间点</td>
|
||||
<td class="value">
|
||||
<div id="sec-allow-reset-password" class="tp-checkbox tp-editable">包括报警日志</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="key"></td>
|
||||
<td class="value">
|
||||
<div id="sec-allow-reset-password" class="tp-checkbox tp-editable">包括运维记录</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="key">自动备份</td>
|
||||
<td class="value">
|
||||
<div id="sec-allow-reset-password" class="tp-checkbox tp-editable tp-selected">在指定时间点自动备份数据库</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="key">备份时间点</td>
|
||||
<td class="value">
|
||||
<select>
|
||||
<select id="select-backup-hour">
|
||||
<option>00</option>
|
||||
<option>01</option>
|
||||
<option>02</option>
|
||||
<option selected="selected">03</option>
|
||||
<option selected="selected">04</option>
|
||||
<option>04</option>
|
||||
<option>05</option>
|
||||
<option>06</option>
|
||||
|
@ -229,7 +198,7 @@
|
|||
<option>23</option>
|
||||
</select>
|
||||
时
|
||||
<select>
|
||||
<select id="select-backup-min">
|
||||
<option selected="selected">00</option>
|
||||
<option>05</option>
|
||||
<option>10</option>
|
||||
|
@ -244,28 +213,120 @@
|
|||
<option>55</option>
|
||||
</select>
|
||||
分
|
||||
<span class="desc">每天在指定时间点备份数据库。</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="key">备份保留时长</td>
|
||||
<td class="value">
|
||||
<input type="text" value="7"/><span class="unit">天</span><span class="desc">1~7。超过设定时间的备份将自动删除,默认为7天。</span>
|
||||
<span class="desc">每天在指定时间点清理存储。</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="key"></td>
|
||||
<td class="value">
|
||||
<a href="javascript:;"><i class="fa fa-download"></i> 下载自动备份文件</a>
|
||||
<button id="btn-clear-storage" class="btn btn-sm btn-success"><i class="fa fa-leaf fa-fw"></i> 现在立即清理</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<hr/>
|
||||
<button id="btn-save-storage-config" class="btn btn-sm btn-primary"><i class="fa fa-edit fa-fw"></i> 保存存储设置</button>
|
||||
<button id="btn-save-storage-config" class="btn btn-sm btn-success"><i class="fa fa-edit fa-fw"></i> 立即备份</button>
|
||||
<button id="btn-save-storage-config" class="btn btn-sm btn-danger"><i class="fa fa-edit fa-fw"></i> 导入备份</button>
|
||||
<button id="btn-save-storage-config" class="btn btn-sm btn-primary"><i class="fa fa-check-circle fa-fw"></i> 保存存储设置</button>
|
||||
## <button id="btn-clear-storage" class="btn btn-sm btn-danger"><i class="fa fa-edit fa-fw"></i> 立即清理</button>
|
||||
</div>
|
||||
|
||||
<!-- panel for backup config -->
|
||||
## <div class="tab-pane" id="tab-backup">
|
||||
## <div class="alert alert-danger">备份功能尚未实现</div>
|
||||
##
|
||||
## <table class="table table-config-list">
|
||||
## <tr>
|
||||
## <td colspan="2" class="title">数据库备份</td>
|
||||
## </tr>
|
||||
## <tr>
|
||||
## <td class="key">备份范围</td>
|
||||
## <td class="value">
|
||||
## <div id="btn-bak-syslog" class="tp-checkbox tp-editable">包括系统日志</div>
|
||||
## </td>
|
||||
## </tr>
|
||||
## <tr>
|
||||
## <td class="key"></td>
|
||||
## <td class="value">
|
||||
## <div id="btn-backup-alert" class="tp-checkbox tp-editable">包括报警日志</div>
|
||||
## </td>
|
||||
## </tr>
|
||||
## <tr>
|
||||
## <td class="key"></td>
|
||||
## <td class="value">
|
||||
## <div id="btn-backup-ops" class="tp-checkbox tp-editable">包括运维记录</div>
|
||||
## </td>
|
||||
## </tr>
|
||||
## <tr>
|
||||
## <td class="key">自动备份</td>
|
||||
## <td class="value">
|
||||
## <div id="btn-auto-backup" class="tp-checkbox tp-editable tp-selected">在指定时间点自动备份数据库</div>
|
||||
## </td>
|
||||
## </tr>
|
||||
## <tr>
|
||||
## <td class="key">备份时间点</td>
|
||||
## <td class="value">
|
||||
## <select id="select-backup-hour">
|
||||
## <option>00</option>
|
||||
## <option>01</option>
|
||||
## <option>02</option>
|
||||
## <option selected="selected">03</option>
|
||||
## <option>04</option>
|
||||
## <option>05</option>
|
||||
## <option>06</option>
|
||||
## <option>07</option>
|
||||
## <option>08</option>
|
||||
## <option>09</option>
|
||||
## <option>10</option>
|
||||
## <option>11</option>
|
||||
## <option>12</option>
|
||||
## <option>13</option>
|
||||
## <option>14</option>
|
||||
## <option>15</option>
|
||||
## <option>16</option>
|
||||
## <option>17</option>
|
||||
## <option>18</option>
|
||||
## <option>19</option>
|
||||
## <option>20</option>
|
||||
## <option>21</option>
|
||||
## <option>22</option>
|
||||
## <option>23</option>
|
||||
## </select>
|
||||
## 时
|
||||
## <select id="select-backup-min">
|
||||
## <option selected="selected">00</option>
|
||||
## <option>05</option>
|
||||
## <option>10</option>
|
||||
## <option>15</option>
|
||||
## <option>20</option>
|
||||
## <option>25</option>
|
||||
## <option>30</option>
|
||||
## <option>35</option>
|
||||
## <option>40</option>
|
||||
## <option>45</option>
|
||||
## <option>50</option>
|
||||
## <option>55</option>
|
||||
## </select>
|
||||
## 分
|
||||
## <span class="desc">每天在指定时间点备份数据库。</span>
|
||||
## </td>
|
||||
## </tr>
|
||||
## <tr>
|
||||
## <td class="key">备份保留时长</td>
|
||||
## <td class="value">
|
||||
## <input id="backup-keep-timeout" type="text" value="7"/><span class="unit">天</span><span class="desc">1~7。超过设定时间的备份将自动删除,默认为7天。</span>
|
||||
## </td>
|
||||
## </tr>
|
||||
## <tr>
|
||||
## <td class="key"></td>
|
||||
## <td class="value">
|
||||
## <a href="javascript:;"><i class="fa fa-download"></i> 下载自动备份文件</a>
|
||||
## </td>
|
||||
## </tr>
|
||||
##
|
||||
## </table>
|
||||
## <hr/>
|
||||
## <button id="btn-save-storage-config" class="btn btn-sm btn-primary"><i class="fa fa-edit fa-fw"></i> 保存存储设置</button>
|
||||
## <button id="btn-do-backup" class="btn btn-sm btn-success"><i class="fa fa-edit fa-fw"></i> 立即备份</button>
|
||||
## <button id="btn-import-backup" class="btn btn-sm btn-danger"><i class="fa fa-edit fa-fw"></i> 导入备份</button>
|
||||
## </div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -492,7 +492,7 @@ class AppConfig(BaseAppConfig):
|
|||
if not self.sys.login.is_exists('lock_timeout'):
|
||||
self.sys.login.lock_timeout = 30 # 30 min
|
||||
if not self.sys.login.is_exists('auth'):
|
||||
self.sys.login.auth = TP_LOGIN_AUTH_USERNAME_PASSWORD | TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA | TP_LOGIN_AUTH_USERNAME_OATH | TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH
|
||||
self.sys.login.auth = TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA | TP_LOGIN_AUTH_USERNAME_OATH | TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH
|
||||
# print('==login==', json.dumps(self.sys.login, separators=(',', ':')))
|
||||
|
||||
# =====================================
|
||||
|
|
|
@ -219,8 +219,8 @@ controllers = [
|
|||
(r'/system/config', system.ConfigHandler),
|
||||
# - [json] 系统配置-发送测试邮件
|
||||
(r'/system/send-test-mail', system.DoSendTestMailHandler),
|
||||
# - [json] 系统配置-保存邮件系统配置
|
||||
(r'/system/save-cfg-smtp', system.DoSaveCfgSmtpHandler),
|
||||
# - [json] 系统配置-保存配置
|
||||
(r'/system/save-cfg', system.DoSaveCfgHandler),
|
||||
|
||||
# - [json] 获取服务器时间
|
||||
(r'/system/get-time', system.DoGetTimeHandler),
|
||||
|
|
|
@ -222,7 +222,7 @@ class DoSendTestMailHandler(TPBaseJsonHandler):
|
|||
self.write_json(code, message=msg)
|
||||
|
||||
|
||||
class DoSaveCfgSmtpHandler(TPBaseJsonHandler):
|
||||
class DoSaveCfgHandler(TPBaseJsonHandler):
|
||||
def post(self):
|
||||
ret = self.check_privilege(TP_PRIVILEGE_SYS_CONFIG)
|
||||
if ret != TPE_OK:
|
||||
|
@ -237,22 +237,55 @@ class DoSaveCfgSmtpHandler(TPBaseJsonHandler):
|
|||
return self.write_json(TPE_JSON_FORMAT)
|
||||
|
||||
try:
|
||||
_server = args['server']
|
||||
_port = int(args['port'])
|
||||
_ssl = args['ssl']
|
||||
_sender = args['sender']
|
||||
_password = args['password']
|
||||
if 'smtp' in args:
|
||||
_cfg = args['smtp']
|
||||
_server = _cfg['server']
|
||||
_port = _cfg['port']
|
||||
_ssl = _cfg['ssl']
|
||||
_sender = _cfg['sender']
|
||||
_password = _cfg['password']
|
||||
|
||||
err = system_model.save_config(self, '更新SMTP设置', 'smtp', _cfg)
|
||||
if err == TPE_OK:
|
||||
# 同时更新内存缓存
|
||||
get_cfg().sys.smtp.server = _server
|
||||
get_cfg().sys.smtp.port = _port
|
||||
get_cfg().sys.smtp.ssl = _ssl
|
||||
get_cfg().sys.smtp.sender = _sender
|
||||
# 特殊处理,防止前端拿到密码
|
||||
get_cfg().sys_smtp_password = _password
|
||||
else:
|
||||
return self.write_json(err)
|
||||
|
||||
if 'password' in args:
|
||||
_cfg = args['password']
|
||||
_allow_reset = _cfg['allow_reset']
|
||||
_force_strong = _cfg['force_strong']
|
||||
_timeout = _cfg['timeout']
|
||||
err = system_model.save_config(self, '更新密码策略设置', 'password', _cfg)
|
||||
if err == TPE_OK:
|
||||
get_cfg().sys.password.allow_reset = _allow_reset
|
||||
get_cfg().sys.password.force_strong = _force_strong
|
||||
get_cfg().sys.password.timeout = _timeout
|
||||
else:
|
||||
return self.write_json(err)
|
||||
|
||||
if 'login' in args:
|
||||
_cfg = args['login']
|
||||
_session_timeout = _cfg['session_timeout']
|
||||
_retry = _cfg['retry']
|
||||
_lock_timeout = _cfg['lock_timeout']
|
||||
_auth = _cfg['auth']
|
||||
err = system_model.save_config(self, '更新登录策略设置', 'login', _cfg)
|
||||
if err == TPE_OK:
|
||||
get_cfg().sys.login.session_timeout = _session_timeout
|
||||
get_cfg().sys.login.retry = _retry
|
||||
get_cfg().sys.login.lock_timeout = _lock_timeout
|
||||
get_cfg().sys.login.auth = _auth
|
||||
else:
|
||||
return self.write_json(err)
|
||||
|
||||
return self.write_json(TPE_OK)
|
||||
except:
|
||||
return self.write_json(TPE_PARAM)
|
||||
|
||||
# 调用Model模块来操作数据库
|
||||
err = system_model.save_smtp_config(self, _server, _port, _ssl, _sender, _password)
|
||||
if err == TPE_OK:
|
||||
# 同时更新内存缓存
|
||||
get_cfg().sys.smtp.server = _server
|
||||
get_cfg().sys.smtp.port = _port
|
||||
get_cfg().sys.smtp.ssl = _ssl
|
||||
get_cfg().sys.smtp.sender = _sender
|
||||
get_cfg().sys_smtp_password = _password
|
||||
|
||||
self.write_json(err)
|
||||
log.e('\n')
|
||||
self.write_json(TPE_FAILED)
|
||||
|
|
|
@ -8,33 +8,25 @@ from app.base.utils import tp_timestamp_utc_now
|
|||
from . import syslog
|
||||
|
||||
|
||||
def save_smtp_config(handler, _server, _port, _ssl, _sender, _password):
|
||||
def save_config(handler, msg, name, value):
|
||||
db = get_db()
|
||||
|
||||
_smtp = {
|
||||
'server': _server,
|
||||
'port': _port,
|
||||
'ssl': _ssl,
|
||||
'sender': _sender,
|
||||
'password': _password
|
||||
}
|
||||
str_val = json.dumps(value, separators=(',', ':'))
|
||||
|
||||
str_smtp = json.dumps(_smtp, separators=(',', ':'))
|
||||
|
||||
sql = 'SELECT name FROM `{dbtp}config` WHERE name="smtp";'.format(dbtp=db.table_prefix)
|
||||
sql = 'SELECT name FROM `{dbtp}config` WHERE name="{name}";'.format(dbtp=db.table_prefix, name=name)
|
||||
db_ret = db.query(sql)
|
||||
if db_ret is not None and len(db_ret) > 0:
|
||||
sql = 'UPDATE `{dbtp}config` SET value={dbph} WHERE name="smtp";'.format(dbtp=db.table_prefix, dbph=db.place_holder)
|
||||
db_ret = db.exec(sql, (str_smtp,))
|
||||
sql = 'UPDATE `{dbtp}config` SET value={dbph} WHERE name="{name}";'.format(dbtp=db.table_prefix, dbph=db.place_holder, name=name)
|
||||
db_ret = db.exec(sql, (str_val,))
|
||||
else:
|
||||
sql = 'INSERT INTO `{dbtp}config` (name, value) VALUES ("smtp", {dbph});'.format(dbtp=db.table_prefix, dbph=db.place_holder)
|
||||
db_ret = db.exec(sql, (str_smtp,))
|
||||
sql = 'INSERT INTO `{dbtp}config` (name, value) VALUES ("{name}", {dbph});'.format(dbtp=db.table_prefix, dbph=db.place_holder, name=name)
|
||||
db_ret = db.exec(sql, (str_val,))
|
||||
|
||||
if not db_ret:
|
||||
return TPE_DATABASE
|
||||
|
||||
operator = handler.get_current_user()
|
||||
syslog.sys_log(operator, handler.request.remote_ip, TPE_OK, "更新SMTP设置")
|
||||
syslog.sys_log(operator, handler.request.remote_ip, TPE_OK, msg)
|
||||
|
||||
return TPE_OK
|
||||
|
||||
|
|
Loading…
Reference in New Issue