diff --git a/server/www/teleport/view/page_single_base.mako b/server/www/teleport/view/page_single_base.mako
index 5187cc5..c7d5f7c 100644
--- a/server/www/teleport/view/page_single_base.mako
+++ b/server/www/teleport/view/page_single_base.mako
@@ -19,6 +19,7 @@
+
<%block name="extend_css_file"/>
<%block name="embed_css"/>
diff --git a/server/www/teleport/view/user/reset-password.mako b/server/www/teleport/view/user/reset-password.mako
index ad948d0..371b04c 100644
--- a/server/www/teleport/view/user/reset-password.mako
+++ b/server/www/teleport/view/user/reset-password.mako
@@ -1,6 +1,5 @@
<%!
page_title_ = '设置密码'
- # page_menu_ = ['error']
%>
<%inherit file="../page_single_base.mako"/>
@@ -8,10 +7,19 @@
%block>
-<%block name="extend_css_file">
-
-%block>
+<%block name="embed_css">
+
+%block>
@@ -34,26 +42,85 @@
- find-my-password
+
+
+
+
+
+
+
+
+
+
+
+
+
验证码,点击图片可更换
+
+
+
+
请填写用户信息,随后一封密码重置确认函将发送到您的邮箱。
+
请注意,密码重置确认函在24小时内有效!
+
+
如果您的用户账号没有设置关联邮箱,请联系系统管理员为您重置密码。
+
+
+
+
+
-
- 注意,为增强系统安全,系统启用强密码策略,要求密码至少8位,必须包含大写字母、小写字母以及数字。
-
-
-
@@ -74,35 +141,24 @@
actions: $('#actions'),
find_password_area: $('#find-my-password'),
+ captcha_image: $('#captcha-image'),
password_area: $('#password-area')
};
- if($app.options.mode === 1) {
+
+ if ($app.options.mode === 1) {
// show 'find-my-password' page
$app.dom.title.text('找回密码');
+ $app.dom.captcha_image.attr('src', '/auth/captcha?h=28&rnd=' + Math.random());
$app.dom.find_password_area.show();
- } else if($app.options.mode === 2) {
+ } else if ($app.options.mode === 2) {
// show 'password-expired' page
$app.dom.title.text('更新密码');
- } else if($app.options.mode === 3) {
+ } else if ($app.options.mode === 3) {
// show 'set-new-password' page
$app.dom.title.text('重置密码');
$app.dom.password_area.show();
}
-
-## if($app.options.code !== TPE_OK) {
-## $app.dom.message.addClass('alert alert-danger');
-##
-## if($app.options.code === TPE_EXPIRED)
-## $app.dom.message.html('很抱歉,此密码重置链接已过期!');
-## else if($app.options.code === TPE_NOT_EXISTS)
-## $app.dom.message.html('很抱歉,此密码重置链接是无效的!');
-##
-## $app.dom.err_area.show();
-## $app.dom.actions.show();
-## } else {
-## $app.dom.password_area.show();
-## }
%block>
diff --git a/server/www/teleport/webroot/app/controller/auth.py b/server/www/teleport/webroot/app/controller/auth.py
index 41f206b..17b306c 100644
--- a/server/www/teleport/webroot/app/controller/auth.py
+++ b/server/www/teleport/webroot/app/controller/auth.py
@@ -179,7 +179,8 @@ class DoLogoutHandler(TPBaseJsonHandler):
class CaptchaHandler(TPBaseHandler):
def get(self):
- code, img_data = tp_captcha_generate_image()
+ h = int(self.get_argument('h', 36))
+ code, img_data = tp_captcha_generate_image(h)
self.set_session('captcha', code)
self.set_header('Content-Type', 'image/jpeg')
self.write(img_data)
diff --git a/server/www/teleport/webroot/app/logic/auth/captcha.py b/server/www/teleport/webroot/app/logic/auth/captcha.py
index 42e30a4..26c6049 100644
--- a/server/www/teleport/webroot/app/logic/auth/captcha.py
+++ b/server/www/teleport/webroot/app/logic/auth/captcha.py
@@ -19,7 +19,7 @@ from wheezy.captcha.image import warp
_captcha_chars = 'AaCDdEeFfHJjKkLMmNnPpQRTtVvWwXxYy34679'
-def tp_captcha_generate_image():
+def __tp_captcha_generate_image():
captcha_image_t = captcha(
width=136,
height=36,
@@ -55,3 +55,85 @@ def tp_captcha_generate_image():
image.save(out, "jpeg", quality=100)
return ''.join(chars_t), out.getvalue()
+
+def tp_captcha_generate_image(h):
+ if h >= 32:
+ captcha_image_t = captcha(
+ width=136,
+ height=36,
+ drawings=[
+ background(color='#eeeeee'),
+ # curve(color='#4388d5', width=1, number=10),
+ curve(color='#4388d5', width=1, number=10),
+ curve(color='#af6fff', width=3, number=16),
+ noise(number=80, color='#eeeeee', level=3),
+ # text(fonts=[
+ # os.path.join(get_cfg().res_path, 'fonts', '001.ttf')
+ # ],
+ # # font_sizes=(28, 34, 36, 32),
+ # font_sizes=(24, 20, 22, 26),
+ # color='#cecece',
+ # # squeeze_factor=1.2,
+ # squeeze_factor=0.9,
+ # drawings=[
+ # # warp(dx_factor=0.05, dy_factor=0.05),
+ # warp(dx_factor=0.03, dy_factor=0.03),
+ # rotate(angle=20),
+ # offset()
+ # ]),
+ smooth(),
+ text(fonts=[
+ os.path.join(get_cfg().res_path, 'fonts', '001.ttf')
+ ],
+ # font_sizes=(28, 34, 36, 32),
+ font_sizes=(h-4, h-2, h, h+1),
+ color='#63a8f5',
+ # squeeze_factor=1.2,
+ squeeze_factor=0.9,
+ drawings=[
+ # warp(dx_factor=0.05, dy_factor=0.05),
+ warp(dx_factor=0.03, dy_factor=0.03),
+ rotate(angle=20),
+ offset()
+ ]),
+ curve(color='#af6fff', width=3, number=16),
+ noise(number=20, color='#eeeeee', level=2),
+ smooth(),
+ ])
+ else:
+ captcha_image_t = captcha(
+ width=int(h*3)+8,
+ height=h,
+ drawings=[
+ background(color='#eeeeee'),
+ # curve(color='#4388d5', width=1, number=10),
+ curve(color='#4388d5', width=1, number=10),
+ curve(color='#af6fff', width=3, number=16),
+ noise(number=40, color='#eeeeee', level=2),
+ smooth(),
+ text(fonts=[
+ os.path.join(get_cfg().res_path, 'fonts', '001.ttf')
+ ],
+ # font_sizes=(28, 34, 36, 32),
+ font_sizes=(h-2, h-1, h, h+1),
+ color='#63a8f5',
+ # squeeze_factor=1.2,
+ squeeze_factor=0.9,
+ drawings=[
+ # warp(dx_factor=0.05, dy_factor=0.05),
+ warp(dx_factor=0.03, dy_factor=0.03),
+ rotate(angle=20),
+ offset()
+ ]),
+ curve(color='#4388d5', width=1, number=8),
+ noise(number=10, color='#eeeeee', level=1),
+ # smooth(),
+ ])
+
+ chars_t = random.sample(_captcha_chars, 4)
+ image = captcha_image_t(chars_t)
+
+ out = io.BytesIO()
+ image.save(out, "jpeg", quality=100)
+ return ''.join(chars_t), out.getvalue()
+