mirror of https://github.com/tp4a/teleport
temp
parent
1db8db69c6
commit
6e62cafe36
|
@ -49,20 +49,19 @@ var CALLBACK_STACK = {
|
|||
}
|
||||
};
|
||||
|
||||
// self.check_error = function() {
|
||||
// if (self.cb_stack.length > 0) {
|
||||
// console.error('callback stack have '+ self.cb_stack.length + ' function not called.');
|
||||
// }
|
||||
// };
|
||||
|
||||
return self;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// console.log(window.location, window.location.protocol+'://'+window.location.host);
|
||||
|
||||
|
||||
// Teleport核心JS
|
||||
var $tp = {
|
||||
server_host: window.location.hostname || '',
|
||||
server_port: (window.location.port === "") ? 80 : parseInt(window.location.port),
|
||||
// server_host: window.location.hostname || '',
|
||||
// server_port: (window.location.port === "") ? 80 : parseInt(window.location.port),
|
||||
web_server: window.location.protocol+'://'+window.location.host,
|
||||
|
||||
// Teleport页面应用对象,放置页面自身特有的属性和函数
|
||||
app: {
|
||||
|
|
|
@ -991,7 +991,7 @@ $app.create_dlg_reset_password = function () {
|
|||
$tp.ajax_post_json('/user/reset-password', {
|
||||
id: dlg.field_id,
|
||||
mode: 1,
|
||||
email: dlg.field_email,
|
||||
// email: dlg.field_email,
|
||||
password: ''
|
||||
},
|
||||
function (ret) {
|
||||
|
@ -1022,7 +1022,7 @@ $app.create_dlg_reset_password = function () {
|
|||
$tp.ajax_post_json('/user/reset-password', {
|
||||
id: dlg.field_id,
|
||||
mode: 2,
|
||||
email: '',
|
||||
// email: '',
|
||||
password: dlg.field_password
|
||||
},
|
||||
function (ret) {
|
||||
|
|
|
@ -455,7 +455,7 @@ class AppConfig(BaseAppConfig):
|
|||
|
||||
if conf_data is None:
|
||||
log.w('system default config info is empty.\n')
|
||||
return True
|
||||
# return True
|
||||
|
||||
# =====================================
|
||||
# 密码策略相关
|
||||
|
|
|
@ -17,6 +17,7 @@ class DatabaseInit:
|
|||
self._create_config()
|
||||
self._create_role()
|
||||
self._create_user()
|
||||
self._create_user_rpt()
|
||||
self._create_host()
|
||||
self._create_acc()
|
||||
self._create_acc_auth()
|
||||
|
@ -160,6 +161,25 @@ class DatabaseInit:
|
|||
'CREATE TABLE {}user ({});'.format(self.db.table_prefix, ','.join(f))
|
||||
)
|
||||
|
||||
def _create_user_rpt(self):
|
||||
""" 用户忘记密码时重置需要进行验证的token,24小时有效
|
||||
"""
|
||||
f = list()
|
||||
|
||||
# id: 自增主键
|
||||
f.append('id integer PRIMARY KEY {}'.format(self.db.auto_increment))
|
||||
# user_id: user's id
|
||||
f.append('user_id int(11) DEFAULT 0')
|
||||
# token: token
|
||||
f.append('token varchar(48) DEFAULT ""')
|
||||
# create_time: 创建时间
|
||||
f.append('create_time int(11) DEFAULT 0')
|
||||
|
||||
self._db_exec(
|
||||
'创建用户找回密码表 user_rpt',
|
||||
'CREATE TABLE {}user_rpt ({});'.format(self.db.table_prefix, ','.join(f))
|
||||
)
|
||||
|
||||
def _create_group(self):
|
||||
""" 组信息(各种组,包括用户组、主机组、账号组等)
|
||||
"""
|
||||
|
|
|
@ -74,6 +74,7 @@ class WebApp:
|
|||
|
||||
if _db.need_create or _db.need_upgrade:
|
||||
cfg.app_mode = APP_MODE_MAINTENANCE
|
||||
get_cfg().update_sys(None)
|
||||
else:
|
||||
cfg.app_mode = APP_MODE_NORMAL
|
||||
_db.load_system_config()
|
||||
|
|
|
@ -19,6 +19,7 @@ from app.base.controller import TPBaseHandler, TPBaseJsonHandler
|
|||
|
||||
class UserListHandler(TPBaseHandler):
|
||||
def get(self):
|
||||
|
||||
ret = self.check_privilege(TP_PRIVILEGE_USER_CREATE)
|
||||
if ret != TPE_OK:
|
||||
return
|
||||
|
@ -446,7 +447,7 @@ class DoResetPasswordHandler(TPBaseJsonHandler):
|
|||
try:
|
||||
user_id = int(args['id'])
|
||||
mode = int(args['mode'])
|
||||
email = args['email'].strip()
|
||||
# email = args['email'].strip()
|
||||
password = args['password']
|
||||
except:
|
||||
return self.write_json(TPE_PARAM)
|
||||
|
@ -455,11 +456,17 @@ class DoResetPasswordHandler(TPBaseJsonHandler):
|
|||
return self.write_json(TPE_PARAM)
|
||||
|
||||
if mode == 1:
|
||||
if len(email) == 0:
|
||||
return self.write_json(TPE_PARAM)
|
||||
# if len(email) == 0:
|
||||
# return self.write_json(TPE_PARAM)
|
||||
|
||||
err, email, token = user.generate_reset_password_token(self, user_id)
|
||||
|
||||
print(err, email, token)
|
||||
|
||||
# 生成一个密码重置链接,24小时有效
|
||||
reset_url = 'http://127.0.0.1/user/validate-password-reset-token?token=G66LXH0EOJ47OXTH7O5KBQ0PHXRSBXBVVFALI6JBJ8HNWUALWI35QECPJ8UV8DEQ'
|
||||
# token = tp_generate_random(16)
|
||||
reset_url = '{}://{}/user/validate-password-reset-token?token={}'.format(self.request.protocol, self.request.host, token)
|
||||
# reset_url = 'http://127.0.0.1/user/validate-password-reset-token?token=G66LXH0EOJ47OXTH7O5KBQ0PHXRSBXBVVFALI6JBJ8HNWUALWI35QECPJ8UV8DEQ'
|
||||
|
||||
err, msg = yield mail.tp_send_mail(
|
||||
email,
|
||||
|
|
|
@ -309,10 +309,6 @@ def cleanup_storage(handler):
|
|||
msg = []
|
||||
have_error = False
|
||||
|
||||
# for test.
|
||||
# sto.keep_log = 5
|
||||
# sto.keep_record = 5
|
||||
|
||||
s = SQL(db)
|
||||
chk_time = _now - sto.keep_log * 24 * 60 * 60
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
from app.base.configs import get_cfg
|
||||
from app.base.db import get_db, SQL
|
||||
from app.base.logger import log
|
||||
from app.base.utils import tp_timestamp_utc_now
|
||||
from app.base.utils import tp_timestamp_utc_now, tp_generate_random
|
||||
from app.const import *
|
||||
from app.model import syslog
|
||||
|
||||
|
@ -246,6 +246,50 @@ def set_password(handler, user_id, password):
|
|||
return TPE_OK
|
||||
|
||||
|
||||
def generate_reset_password_token(handler, user_id):
|
||||
db = get_db()
|
||||
operator = handler.get_current_user()
|
||||
s = SQL(db)
|
||||
_time_now = tp_timestamp_utc_now()
|
||||
|
||||
# 0. query user's email by user_id
|
||||
err = s.select_from('user', ['email'], alt_name='u').where('u.id={user_id}'.format(user_id=user_id)).query()
|
||||
if err != TPE_OK:
|
||||
return err, None, None
|
||||
if len(s.recorder) == 0:
|
||||
return TPE_DATABASE, None, None
|
||||
|
||||
email = s.recorder[0].email
|
||||
|
||||
# 1. clean all timed out tokens.
|
||||
s.reset().delete_from('user_rpt').where('create_time<{}'.format(_time_now - 24 * 60 * 60)).exec()
|
||||
|
||||
# 2. find out if this user already have a token.
|
||||
err = s.reset().select_from('user_rpt', ['id'], alt_name='u').where('u.user_id={}'.format(user_id)).query()
|
||||
if err != TPE_OK:
|
||||
return err, None, None
|
||||
|
||||
token = tp_generate_random(16)
|
||||
|
||||
if len(s.recorder) == 0:
|
||||
sql = 'INSERT INTO `{dbtp}user_rpt` (user_id, token, create_time) VALUES ' \
|
||||
'({user_id}, "{token}", {create_time});' \
|
||||
''.format(dbtp=db.table_prefix, user_id=user_id, token=token, create_time=_time_now)
|
||||
db_ret = db.exec(sql)
|
||||
if not db_ret:
|
||||
return TPE_DATABASE, None, None
|
||||
else:
|
||||
sql = 'UPDATE `{dbtp}user_rpt` SET token="{token}", create_time={create_time} WHERE user_id={user_id};' \
|
||||
''.format(dbtp=db.table_prefix, token=token, create_time=_time_now, user_id=user_id)
|
||||
db_ret = db.exec(sql)
|
||||
if not db_ret:
|
||||
return TPE_DATABASE, None, None
|
||||
|
||||
# syslog.sys_log(operator, handler.request.remote_ip, TPE_OK, "为用户 {} 手动重置了密码".format(name))
|
||||
|
||||
return TPE_OK, email, token
|
||||
|
||||
|
||||
def update_login_info(handler, user_id):
|
||||
db = get_db()
|
||||
_time_now = tp_timestamp_utc_now()
|
||||
|
|
Loading…
Reference in New Issue