mirror of https://github.com/tp4a/teleport
todo: 系统设置中的各项,应该分类后按json格式存放,方便管理及将来扩展。
parent
0247d5603d
commit
71bd6817c2
|
@ -23,7 +23,7 @@ var SLOGAN = [
|
|||
|
||||
// $app.on_init = function (cb_stack, cb_args) {
|
||||
$app.on_init = function (cb_stack) {
|
||||
$app.login_type = LOGIN_TYPE_PASSWORD_CAPTCHA;
|
||||
$app.login_type = TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA;
|
||||
$app.dom = {
|
||||
slogan: $('#msg-slogan'),
|
||||
btn_login_type_password: $('#login-type-password'),
|
||||
|
@ -58,14 +58,14 @@ $app.on_init = function (cb_stack) {
|
|||
$app.init_slogan();
|
||||
|
||||
$app.dom.btn_login_type_password.click(function () {
|
||||
$app.login_type = LOGIN_TYPE_PASSWORD_CAPTCHA;
|
||||
$app.login_type = TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA;
|
||||
$app.dom.btn_login_type_oath.removeClass('selected');
|
||||
$(this).addClass('selected');
|
||||
$app.dom.area_oath.slideUp(100);
|
||||
$app.dom.area_captcha.slideDown(100);
|
||||
});
|
||||
$app.dom.btn_login_type_oath.click(function () {
|
||||
$app.login_type = LOGIN_TYPE_PASSWORD_OATH;
|
||||
$app.login_type = TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH;
|
||||
$app.dom.btn_login_type_password.removeClass('selected');
|
||||
$(this).addClass('selected');
|
||||
$app.dom.area_oath.slideDown(100);
|
||||
|
@ -88,9 +88,9 @@ $app.on_init = function (cb_stack) {
|
|||
$app.dom.input_password.keydown(function (event) {
|
||||
$('[data-toggle="popover"]').popover('hide');
|
||||
if (event.which === 13) {
|
||||
if ($app.login_type === LOGIN_TYPE_PASSWORD_CAPTCHA)
|
||||
if ($app.login_type === TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA)
|
||||
$app.dom.input_captcha.focus();
|
||||
else if ($app.login_type === LOGIN_TYPE_PASSWORD_OATH)
|
||||
else if ($app.login_type === TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH)
|
||||
$app.dom.input_oath.focus();
|
||||
}
|
||||
});
|
||||
|
@ -141,7 +141,7 @@ $app.login_account = function () {
|
|||
return;
|
||||
}
|
||||
|
||||
if ($app.login_type === LOGIN_TYPE_PASSWORD_CAPTCHA) {
|
||||
if ($app.login_type === TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA) {
|
||||
if (str_captcha.length !== 4) {
|
||||
$app.show_op_box('error', '验证码错误!');
|
||||
setTimeout(function () {
|
||||
|
@ -149,7 +149,7 @@ $app.login_account = function () {
|
|||
}, 150);
|
||||
return;
|
||||
}
|
||||
} else if ($app.login_type === LOGIN_TYPE_PASSWORD_OATH) {
|
||||
} else if ($app.login_type === TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH) {
|
||||
if (str_oath.length !== 6 || ('' + parseInt(str_oath)) !== str_oath) {
|
||||
$app.show_op_box('error', '身份验证器动态验证码错误!');
|
||||
setTimeout(function () {
|
||||
|
@ -163,7 +163,7 @@ $app.login_account = function () {
|
|||
$app.show_op_box('wait', '<i class="fa fa-circle-o-notch fa-spin"></i> 正在进行身份认证,请稍候...');
|
||||
|
||||
// 先判断一下captcha是否正确,如果不正确,拒绝登录
|
||||
if ($app.login_type === LOGIN_TYPE_PASSWORD_CAPTCHA) {
|
||||
if ($app.login_type === TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA) {
|
||||
$tp.ajax_post_json('/auth/verify-captcha', {captcha: str_captcha},
|
||||
function (ret) {
|
||||
if (ret.code === TPE_OK) {
|
||||
|
|
|
@ -2,23 +2,6 @@
|
|||
|
||||
$app.on_init = function () {
|
||||
$app.dom = {
|
||||
// btn_reset_oath_code: $('#btn-reset-oath-code'),
|
||||
// btn_verify_oath_code: $('#btn-verify-oath-code'),
|
||||
// btn_verify_oath_code_and_save: $('#btn-verify-oath-and-save'),
|
||||
// btn_modify_password: $('#btn-modify-password'),
|
||||
// btn_toggle_oath_download: $('#toggle-oath-download'),
|
||||
//
|
||||
// oath_app_download_box: $('#oath-app-download-box'),
|
||||
//
|
||||
// input_current_password: $('#current-password'),
|
||||
// input_new_password: $('#new-password-1'),
|
||||
// input_new_password_confirm: $('#new-password-2'),
|
||||
// input_oath_code: $('#oath-code'),
|
||||
// input_oath_code_verify: $('#oath-code-verify'),
|
||||
//
|
||||
// dlg_reset_oath_code: $('#dialog-reset-oath-code'),
|
||||
// oath_secret_image: $('#oath-secret-qrcode'),
|
||||
// tmp_oath_secret: $('#tmp-oath-secret'),
|
||||
|
||||
// 邮件系统设置
|
||||
mail: {
|
||||
|
@ -183,7 +166,7 @@ $app._on_btn_save_mail_config = function () {
|
|||
return;
|
||||
|
||||
$app.dom.mail.btn_save_mail_config.attr('disabled', 'disabled');
|
||||
$tp.ajax_post_json('/system/save-mail-config',
|
||||
$tp.ajax_post_json('/system/save-smtp-config',
|
||||
{
|
||||
smtp_server: _server,
|
||||
smtp_port: _port,
|
||||
|
|
|
@ -79,15 +79,15 @@ $app.create_controls = function () {
|
|||
},
|
||||
{
|
||||
t: '审计', i: [
|
||||
{n: '审计(查看历史会话)', p: TP_PRIVILEGE_AUDIT_OPS_HISTORY},
|
||||
{n: '审计(回放操作录像)', p: TP_PRIVILEGE_AUDIT_OPS_HISTORY},
|
||||
{n: '审计授权管理', p: TP_PRIVILEGE_AUDIT_AUZ}]
|
||||
},
|
||||
{
|
||||
t: '系统', i: [
|
||||
{n: '角色管理', p: TP_PRIVILEGE_SYS_ROLE},
|
||||
{n: '系统配置与维护', p: TP_PRIVILEGE_SYS_CONFIG},
|
||||
{n: '历史会话管理', p: TP_PRIVILEGE_SYS_OPS_HISTORY},
|
||||
{n: '系统日志管理', p: TP_PRIVILEGE_SYS_LOG}]
|
||||
// {n: '历史会话管理', p: TP_PRIVILEGE_SYS_OPS_HISTORY},
|
||||
{n: '查看系统日志', p: TP_PRIVILEGE_SYS_LOG}]
|
||||
}
|
||||
];
|
||||
nodes = [];
|
||||
|
@ -160,7 +160,7 @@ $app.show_role = function (role_id, edit_mode) {
|
|||
}
|
||||
|
||||
if (role_id === 0) {
|
||||
role = {id: 0, name: '', privilege: 0};
|
||||
role = {id: 0, name: '', privilege: TP_PRIVILEGE_LOGIN_WEB};
|
||||
edit = true;
|
||||
} else {
|
||||
for (var i = 0; i < $app.role_list.length; ++i) {
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
"use strict";
|
||||
|
||||
|
||||
var TP_LOGIN_AUTH_SYS_DEFAULT = 0; // 系统默认
|
||||
var TP_LOGIN_AUTH_USERNAME_PASSWORD = 0x0001; // 用户名+密码
|
||||
var TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA = 0x0002; // 用户名+密码+验证码
|
||||
var TP_LOGIN_AUTH_USERNAME_OATH = 0x0004; // 用户名+OATH
|
||||
var TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH = 0x0008; // 用户名+密码+OATH
|
||||
|
||||
//=======================================================
|
||||
// 远程连接认证方式
|
||||
//=======================================================
|
||||
|
@ -135,8 +142,8 @@ var TP_PRIVILEGE_AUDIT_AUZ = 0x00010000;// # 审计策略授权管理
|
|||
|
||||
var TP_PRIVILEGE_SYS_ROLE = 0x00040000;// # 角色管理
|
||||
var TP_PRIVILEGE_SYS_CONFIG = 0x00080000;// # 系统配置维护
|
||||
var TP_PRIVILEGE_SYS_OPS_HISTORY = 0x00100000;// # 历史会话管理(例如删除历史会话、设定多长时间之前的历史会话自动删除等)
|
||||
var TP_PRIVILEGE_SYS_LOG = 0x00200000;// # 系统日志管理(例如日志备份、删除等)
|
||||
//var TP_PRIVILEGE_SYS_OPS_HISTORY = 0x00100000;// # 历史会话管理(例如删除历史会话、设定多长时间之前的历史会话自动删除等)
|
||||
var TP_PRIVILEGE_SYS_LOG = 0x00200000;// # 查看系统日志
|
||||
|
||||
var TP_PRIVILEGES = [
|
||||
TP_PRIVILEGE_LOGIN_WEB,
|
||||
|
@ -159,7 +166,7 @@ var TP_PRIVILEGES = [
|
|||
//TP_PRIVILEGE_AUDIT_SYSLOG,
|
||||
TP_PRIVILEGE_SYS_ROLE,
|
||||
TP_PRIVILEGE_SYS_CONFIG,
|
||||
TP_PRIVILEGE_SYS_OPS_HISTORY,
|
||||
//TP_PRIVILEGE_SYS_OPS_HISTORY,
|
||||
TP_PRIVILEGE_SYS_LOG
|
||||
];
|
||||
|
||||
|
@ -222,11 +229,6 @@ var TPE_START_CLIENT = 100002; // 无法启动客户端程序(无法创建进
|
|||
var TPE_NO_CORE_SERVER = 200000; // 未能检测到核心服务
|
||||
|
||||
|
||||
// 使用用户名密码登录(额外需要验证码)
|
||||
var LOGIN_TYPE_PASSWORD_CAPTCHA = 1;
|
||||
// 使用用户名密码登录(额外需要身份验证器的动态验证码)
|
||||
var LOGIN_TYPE_PASSWORD_OATH = 2;
|
||||
|
||||
// ==========================================================================
|
||||
// 数据库类型
|
||||
// ==========================================================================
|
||||
|
|
|
@ -78,7 +78,8 @@
|
|||
</div>
|
||||
|
||||
<div class="tab-pane" style="padding:15px;" id="tab-search">
|
||||
此功能尚未实现
|
||||
<div class="alert alert-danger">快速查找功能尚未实现</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -88,7 +89,6 @@
|
|||
<div class="box">
|
||||
<p>说明:</p>
|
||||
<ul class="help-list">
|
||||
## <li>可以通过表格标题栏进行搜索或过滤,以便快速定位你需要的信息。标题栏左侧的 <i class="fa fa-rotate-left fa-fw"></i> 可以重置过滤器。</li>
|
||||
<li>上下拖动“顺序”栏中的 <i class="fa fa-reorder fa-fw"></i> 可以调节策略的检查顺序。</li>
|
||||
<li>可以在“快速查找”中快速定位用户或主机的授权关系。</li>
|
||||
</ul>
|
||||
|
|
|
@ -17,15 +17,15 @@
|
|||
<div class="page-content-inner">
|
||||
<div class="box box-nav-tabs">
|
||||
<ul class="nav nav-tabs">
|
||||
<li><a href="#tab-security" data-toggle="tab">安全</a></li>
|
||||
<li class="active"><a href="#tab-security" data-toggle="tab">安全</a></li>
|
||||
<li><a href="#tab-email" data-toggle="tab">邮件系统</a></li>
|
||||
<li class="active"><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>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<!-- panel for security config -->
|
||||
<div class="tab-pane" id="tab-security">
|
||||
<div class="tab-pane active" id="tab-security">
|
||||
<table class="table table-config-list">
|
||||
<tr>
|
||||
<td colspan="2" class="title">密码策略</td>
|
||||
|
@ -130,7 +130,7 @@
|
|||
</div>
|
||||
|
||||
<!-- panel for storage config -->
|
||||
<div class="tab-pane active" id="tab-storage">
|
||||
<div class="tab-pane" id="tab-storage">
|
||||
<div class="alert alert-info">当前会话录像存储空间:总 123.35GB,可用空间 85.17GB。</div>
|
||||
<table class="table table-config-list">
|
||||
<tr>
|
||||
|
@ -163,6 +163,8 @@
|
|||
|
||||
<!-- 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>
|
||||
|
|
|
@ -63,28 +63,28 @@
|
|||
<div class="box">
|
||||
<p>权限说明:</p>
|
||||
<ul class="help-list">
|
||||
<li><em>主机信息创建/编辑</em> 允许创建和编辑主机资产信息,如IP地址、端口与协议、名称、备注等。</li>
|
||||
<li><em>删除主机信息</em> 允许删除主机资产。</li>
|
||||
<li><em>主机创建/编辑</em> 允许创建和编辑主机资产信息,如IP地址、端口与协议、名称、备注等。</li>
|
||||
<li><em>删除主机</em> 允许删除主机资产。</li>
|
||||
<li><em>主机禁用/解禁</em> 允许设置禁止访问某主机,或者解禁。</li>
|
||||
<li><em>主机分组管理</em> 将主机进行分组,便于快速查找或者授权管理。</li>
|
||||
<li><em>主机账号管理</em> 管理能够远程登录主机的账号,包括账号名称和密码、SSH密钥等。</li>
|
||||
<li><em>主机账号分组管理</em> 管理大量主机时,可能会为这些主机设置相同的主机账号和密码,使用主机账号分组可便于批量授权</li>
|
||||
<li><em>账号管理</em> 管理能够远程登录主机的账号,包括账号名称和密码、SSH密钥等。</li>
|
||||
<li><em>账号分组管理</em> 将远程账号进行分组管理,便于批量授权。</li>
|
||||
<li><em>登录WEB系统</em> 允许用户登录本WEB系统,除特殊情况外,用户应该具有本权限。</li>
|
||||
<li><em>用户创建/编辑</em> 允许创建或编辑登录teleport系统的用户账号。</li>
|
||||
<li><em>删除用户</em> 允许删除登录teleport系统的用户账号。</li>
|
||||
<li><em>删除用户</em> 允许删除登录teleport系统的用户。</li>
|
||||
<li><em>用户禁用/解禁</em> 允许设置禁止用户访问teleport系统,或者解禁。当用户因连续认证失败而被临时锁定时,也可由此权限进行解锁。</li>
|
||||
<li><em>用户分组管理</em> 将用户进行分组,便于快速查找或者授权管理。</li>
|
||||
<li><em>远程主机运维</em> 允许用户访问远程主机。</li>
|
||||
<li><em>运维授权管理</em> 授权用户/用户组使用特定的远程主机账号访问指定远程主机。具有本权限的用户自动具有远程主机运维的权限。</li>
|
||||
<li><em>查看在线会话</em> 允许查看在线运维会话,并进行实时同步显示。【此功能尚未实现】</li>
|
||||
<li><em>阻断在线会话</em> 强行终止在线运维会话。【此功能尚未实现】</li>
|
||||
<li><em>审计(查看历史会话)</em> 允许重放历史会话。</li>
|
||||
<li><em>审计(回放操作录像)</em> 允许重放会话的操作录像。注意:运维人员总是可以回放自己的操作录像。</li>
|
||||
<li><em>审计授权管理</em> 授权用户/用户组重放指定远程主机的历史会话。具有本权限的用户自动具有审计权限。</li>
|
||||
<li><em>角色管理</em> 允许创建、编辑、删除角色。</li>
|
||||
<li><em>系统配置与维护</em></li>
|
||||
<li><em>历史会话管理</em></li>
|
||||
<li><em>系统日志管理</em></li>
|
||||
<li><em>系统配置与维护</em> 允许对teleport系统进行配置和维护操作。</li>
|
||||
## <li><em>历史会话管理</em> 允许查看用户在teleport系统上的操作记录。</li>
|
||||
<li><em>查看系统日志</em> 允许查看用户在teleport系统上的操作记录。</li>
|
||||
</ul>
|
||||
## <p>特别注意:teleport系统使用<strong>最小权限判定规则</strong>,也即,在检查权限时,会按用户所具有的最小权限进行判断。例如:如用户无远程主机运维权限,那么即使其所在用户组被授权访问某远程主机,此用户也无法连接到该远程主机。</p>
|
||||
<p>特别注意:teleport系统使用<strong>最小权限判定规则</strong>,也即,在检查权限时,会按用户所具有的最小权限进行判断。例如:如用户无远程主机运维权限,那么即使其所在用户组被授权访问某远程主机,此用户也无法连接到该远程主机。</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
import configparser
|
||||
import os
|
||||
|
||||
from app.const import *
|
||||
from .logger import log
|
||||
from .utils import AttrDict, tp_make_dir
|
||||
|
||||
|
@ -457,6 +458,40 @@ class AppConfig(BaseAppConfig):
|
|||
return True
|
||||
|
||||
try:
|
||||
# =====================================
|
||||
# 密码策略相关
|
||||
# =====================================
|
||||
self.sys.password = AttrDict()
|
||||
self.sys.password.find = True
|
||||
self.sys.password.strong = True
|
||||
self.sys.password.timeout = 30 # 30 days
|
||||
if 'password_find' in conf_data:
|
||||
self.sys.password.find = conf_data['password_find']
|
||||
if 'password_strong' in conf_data:
|
||||
self.sys.password.strong = conf_data['password_strong']
|
||||
if 'password_timeout' in conf_data:
|
||||
self.sys.password.timeout = int(conf_data['password_timeout'])
|
||||
|
||||
# =====================================
|
||||
# 登录相关
|
||||
# =====================================
|
||||
self.sys.login = AttrDict()
|
||||
self.sys.login.session_timeout = 30
|
||||
self.sys.login.retry = 0
|
||||
self.sys.login.lock_timeout = 30 # 30 min
|
||||
self.sys.login.auth = TP_LOGIN_AUTH_USERNAME_PASSWORD | TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA | TP_LOGIN_AUTH_USERNAME_OATH
|
||||
if 'login_session_timeout' in conf_data:
|
||||
self.sys.login.session_timeout = int(conf_data['login_session_timeout'])
|
||||
if 'login_retry' in conf_data:
|
||||
self.sys.login.retry = int(conf_data['login_retry'])
|
||||
if 'login_lock_timeout' in conf_data:
|
||||
self.sys.login.lock_timeout = int(conf_data['login_lock_timeout'])
|
||||
if 'login_auth' in conf_data:
|
||||
self.sys.login.auth = int(conf_data['login_auth'])
|
||||
|
||||
# =====================================
|
||||
# SMTP相关
|
||||
# =====================================
|
||||
self.sys.smtp = AttrDict()
|
||||
self.sys.smtp.server = ""
|
||||
self.sys.smtp.port = 25
|
||||
|
@ -473,6 +508,17 @@ class AppConfig(BaseAppConfig):
|
|||
if 'smtp_password' in conf_data:
|
||||
self.sys_smtp_password = conf_data['smtp_password']
|
||||
|
||||
# =====================================
|
||||
# 存储相关
|
||||
# =====================================
|
||||
self.sys.storage = AttrDict()
|
||||
self.sys.storage.log = 0
|
||||
self.sys.storage.record = 0
|
||||
if 'storage_log' in conf_data:
|
||||
self.sys.storage.log = int(conf_data['storage_log'])
|
||||
if 'storage_record' in conf_data:
|
||||
self.sys.storage.record = int(conf_data['storage_record'])
|
||||
|
||||
self.sys.loaded = True
|
||||
|
||||
except IndexError:
|
||||
|
|
|
@ -741,8 +741,9 @@ class DatabaseInit:
|
|||
self._db_exec(
|
||||
'创建系统管理员账号',
|
||||
'INSERT INTO `{}user` (`type`, `auth_type`, `username`, `surname`, `password`, `role_id`, `state`, `email`, `creator_id`, `create_time`, `last_login`, `last_chpass`) VALUES '
|
||||
'(1, 1, "{username}", "{surname}", "{password}", 1, {state}, "{email}", 0, {create_time}, {last_login}, {last_chpass});'
|
||||
'(1, {auth_type}, "{username}", "{surname}", "{password}", 1, {state}, "{email}", 0, {create_time}, {last_login}, {last_chpass});'
|
||||
''.format(self.db.table_prefix,
|
||||
auth_type=TP_LOGIN_AUTH_SYS_DEFAULT,
|
||||
username=sysadmin, surname=sysadmin, password=tp_password_generate_secret(password), state=TP_STATE_NORMAL, email=email,
|
||||
create_time=_time_now, last_login=_time_now, last_chpass=_time_now)
|
||||
)
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
LOGIN_TYPE_PASSWORD_CAPTCHA = 1
|
||||
LOGIN_TYPE_PASSWORD_OATH = 2
|
||||
TP_LOGIN_AUTH_SYS_DEFAULT = 0 # 系统默认(根据系统配置进行)
|
||||
TP_LOGIN_AUTH_USERNAME_PASSWORD = 0x0001 # 用户名+密码
|
||||
TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA = 0x0002 # 用户名+密码+验证码
|
||||
TP_LOGIN_AUTH_USERNAME_OATH = 0x0004 # 用户名+OATH
|
||||
TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH = 0x0008 # 用户名+密码+OATH
|
||||
|
||||
APP_MODE_NORMAL = 1
|
||||
APP_MODE_MAINTENANCE = 2
|
||||
|
@ -156,8 +159,8 @@ TP_PRIVILEGE_AUDIT_AUZ = 0x00010000 # 审计策略授权管理
|
|||
|
||||
TP_PRIVILEGE_SYS_ROLE = 0x00040000 # 角色管理
|
||||
TP_PRIVILEGE_SYS_CONFIG = 0x00080000 # 系统配置维护
|
||||
TP_PRIVILEGE_SYS_OPS_HISTORY = 0x00100000 # 历史会话管理(例如删除历史会话、设定多长时间之前的历史会话自动删除等)
|
||||
TP_PRIVILEGE_SYS_LOG = 0x00200000 # 系统日志管理(例如日志备份、删除等)
|
||||
# TP_PRIVILEGE_SYS_OPS_HISTORY = 0x00100000 # 历史会话管理(例如删除历史会话、设定多长时间之前的历史会话自动删除等)
|
||||
TP_PRIVILEGE_SYS_LOG = 0x00200000 # 查看系统日志
|
||||
|
||||
# ===================================================================
|
||||
# error code
|
||||
|
|
|
@ -220,7 +220,7 @@ controllers = [
|
|||
# - [json] 系统配置-发送测试邮件
|
||||
(r'/system/send-test-mail', system.DoSendTestMailHandler),
|
||||
# - [json] 系统配置-保存邮件系统配置
|
||||
(r'/system/save-mail-config', system.DoSaveMailConfigHandler),
|
||||
(r'/system/save-smtp-config', system.DoSaveSmtpConfigHandler),
|
||||
|
||||
# - [json] 获取服务器时间
|
||||
(r'/system/get-time', system.DoGetTimeHandler),
|
||||
|
|
|
@ -74,7 +74,7 @@ class DoLoginHandler(TPBaseJsonHandler):
|
|||
|
||||
_tmp = {'username': username, 'surname': username}
|
||||
|
||||
if login_type == LOGIN_TYPE_PASSWORD_CAPTCHA:
|
||||
if login_type == TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA:
|
||||
oath = None
|
||||
code = self.get_session('captcha')
|
||||
if code is None:
|
||||
|
@ -82,7 +82,7 @@ class DoLoginHandler(TPBaseJsonHandler):
|
|||
self.del_session('captcha')
|
||||
if code.lower() != captcha.lower():
|
||||
return self.write_json(TPE_CAPTCHA_MISMATCH, '验证码错误')
|
||||
elif login_type == LOGIN_TYPE_PASSWORD_OATH:
|
||||
elif login_type == TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH:
|
||||
if len(oath) == 0:
|
||||
return self.write_json(TPE_OATH_MISMATCH, '未提供身份验证器动态验证码')
|
||||
else:
|
||||
|
@ -108,11 +108,11 @@ class DoLoginHandler(TPBaseJsonHandler):
|
|||
syslog.sys_log(_tmp, self.request.remote_ip, TPE_FAILED, '登录失败,系统内部错误')
|
||||
return self.write_json(TPE_FAILED)
|
||||
|
||||
if login_type == LOGIN_TYPE_PASSWORD_CAPTCHA:
|
||||
if login_type == TP_LOGIN_AUTH_USERNAME_PASSWORD_CAPTCHA:
|
||||
if not tp_password_verify(password, user_info['password']):
|
||||
syslog.sys_log(_tmp, self.request.remote_ip, TPE_USER_AUTH, '登录失败,密码错误!')
|
||||
return self.write_json(TPE_USER_AUTH)
|
||||
elif login_type == LOGIN_TYPE_PASSWORD_OATH:
|
||||
elif login_type == TP_LOGIN_AUTH_USERNAME_PASSWORD_OATH:
|
||||
if not tp_oath_verify_code(user_info['oath_secret'], oath):
|
||||
syslog.sys_log(_tmp, self.request.remote_ip, TPE_OATH_MISMATCH, "登录失败,身份验证器动态验证码错误!")
|
||||
return self.write_json(TPE_OATH_MISMATCH)
|
||||
|
|
|
@ -14,7 +14,6 @@ from app.const import *
|
|||
from app.model import syslog
|
||||
|
||||
|
||||
# time_now = int(time.time())
|
||||
class DoGetTimeHandler(TPBaseJsonHandler):
|
||||
def post(self):
|
||||
time_now = int(datetime.datetime.utcnow().timestamp())
|
||||
|
@ -223,7 +222,7 @@ class DoSendTestMailHandler(TPBaseJsonHandler):
|
|||
self.write_json(code, message=msg)
|
||||
|
||||
|
||||
class DoSaveMailConfigHandler(TPBaseJsonHandler):
|
||||
class DoSaveSmtpConfigHandler(TPBaseJsonHandler):
|
||||
def post(self):
|
||||
ret = self.check_privilege(TP_PRIVILEGE_SYS_CONFIG)
|
||||
if ret != TPE_OK:
|
||||
|
|
|
@ -101,7 +101,7 @@ def remove_role(handler, role_id):
|
|||
if not db.transaction(sql_list):
|
||||
return TPE_DATABASE
|
||||
|
||||
syslog.sys_log(handler.get_current_user(), handler.request.remote_ip, TPE_OK, "删除角色:{}".format(','.join(role_name)))
|
||||
syslog.sys_log(handler.get_current_user(), handler.request.remote_ip, TPE_OK, "删除角色:{}".format(role_name))
|
||||
|
||||
return TPE_OK
|
||||
|
||||
|
|
Loading…
Reference in New Issue