From f333a51e075455337dd1e186efbe15bf6ab88c42 Mon Sep 17 00:00:00 2001 From: ApexLiu Date: Tue, 14 Nov 2017 01:29:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=BE=E5=9B=9E=E5=AF=86=E7=A0=81=E3=80=81?= =?UTF-8?q?=E9=87=8D=E7=BD=AE=E5=AF=86=E7=A0=81=E7=AD=89=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../www/teleport/view/page_single_base.mako | 1 + .../teleport/view/user/reset-password.mako | 116 +++++++++++++----- .../teleport/webroot/app/controller/auth.py | 3 +- .../webroot/app/logic/auth/captcha.py | 84 ++++++++++++- 4 files changed, 172 insertions(+), 32 deletions(-) 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 name="extend_css_file"> - - +<%block name="embed_css"> + +
@@ -34,26 +42,85 @@
@@ -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(); -## } 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() +