diff --git a/requirements.txt b/requirements.txt index 8c5ff39d0..4d7e1d938 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,7 @@ flask==1.0.2 flask-session flask-socketio==3.3.2 flask-helper==0.19 +Flask-Caching==1.0.2 gunicorn==19.9 gevent==1.3.3 gevent-websocket==0.10.1 diff --git a/route/__init__.py b/route/__init__.py index 731358304..6bc12a44d 100755 --- a/route/__init__.py +++ b/route/__init__.py @@ -21,12 +21,12 @@ from flask import session from flask import request from flask import redirect from flask import url_for - +from flask_caching import Cache from flask_session import Session - sys.path.append(os.getcwd() + "/class/core") sys.path.append("/usr/local/lib/python2.7/site-packages") + import db import public import config_api @@ -37,7 +37,8 @@ app.config.version = config_api.config_api().getVersion() # app.secret_key = uuid.UUID(int=uuid.getnode()).hex[-12:] app.config['SECRET_KEY'] = uuid.UUID(int=uuid.getnode()).hex[-12:] app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=31) - +cache = Cache(config={'CACHE_TYPE': 'simple'}) +cache.init_app(app, config={'CACHE_TYPE': 'simple'}) try: from flask_sqlalchemy import SQLAlchemy @@ -167,7 +168,7 @@ def doLogin(): username = request.form.get('username', '').strip() password = request.form.get('password', '').strip() code = request.form.get('code', '').strip() - print session + if session.has_key('code'): if session['code'] != public.md5(code): return public.returnJson(False, '验证码错误,请重新输入!') @@ -176,11 +177,31 @@ def doLogin(): "id=?", (1,)).field('id,username,password').find() password = public.md5(password) + login_cache_count = 5 + login_cache_limit = cache.get('login_cache_limit') + filename = 'data/close.pl' + if os.path.exists(filename): + return public.returnJson(False, '面板已经关闭!') + if userInfo['username'] != username or userInfo['password'] != password: - public.writeLog('用户登录', public.getInfo( - "密码错误,帐号:{1},密码:{2},登录IP:{3}", (('****', '******', request.remote_addr)))) - return public.returnJson(False, public.getInfo("用户名或密码错误,您还可以尝试[{1}]次!", ('1'))) + msg = "密码错误,帐号:{1},密码:{2},登录IP:{3}", (( + '****', '******', request.remote_addr)) + + if login_cache_limit == None: + login_cache_limit = 1 + else: + login_cache_limit = int(login_cache_limit) + 1 + + if login_cache_limit >= login_cache_count: + public.writeFile(filename, 'True') + return public.returnJson(False, '面板已经关闭!') + + cache.set('login_cache_limit', login_cache_limit, timeout=10000) + login_cache_limit = cache.get('login_cache_limit') + public.writeLog('用户登录', public.getInfo(msg)) + return public.returnJson(False, public.getInfo("用户名或密码错误,您还可以尝试[{1}]次!", (str(login_cache_count - login_cache_limit)))) + cache.delete('login_cache_limit') session['login'] = True session['username'] = userInfo['username'] return public.returnJson(True, '登录成功,正在跳转...')