|
|
@@ -3,11 +3,14 @@ from views.forms import login_form |
|
|
from views.utils import get_nav_bar, csrf_protected |
|
|
from views.utils import get_nav_bar, csrf_protected |
|
|
import models.session |
|
|
import models.session |
|
|
import models.user |
|
|
import models.user |
|
|
|
|
|
import logging |
|
|
import random |
|
|
import random |
|
|
import string |
|
|
import string |
|
|
import bcrypt |
|
|
import bcrypt |
|
|
import time |
|
|
import time |
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
# Get html templates |
|
|
# Get html templates |
|
|
render = web.template.render('templates/') |
|
|
render = web.template.render('templates/') |
|
|
|
|
|
|
|
|
@@ -60,10 +63,14 @@ class Login(): |
|
|
return render.login(nav, login_form, "- There have been too many incorrect login attempts for your account. You have to wait a minute before you can log in.") |
|
|
return render.login(nav, login_form, "- There have been too many incorrect login attempts for your account. You have to wait a minute before you can log in.") |
|
|
|
|
|
|
|
|
if bcrypt.checkpw(data.password.encode('UTF-8'), password_hash.encode('UTF-8')): |
|
|
if bcrypt.checkpw(data.password.encode('UTF-8'), password_hash.encode('UTF-8')): |
|
|
|
|
|
if login_attempts > login_attempts_threshold: |
|
|
|
|
|
logger.info("User %s logged in succesfully after %s attempts", username, login_attempts) |
|
|
|
|
|
|
|
|
models.user.set_login_attempts(userid, 0, time.time()) |
|
|
models.user.set_login_attempts(userid, 0, time.time()) |
|
|
self.login(username, userid, data.remember) |
|
|
self.login(username, userid, data.remember) |
|
|
raise web.seeother("/") |
|
|
raise web.seeother("/") |
|
|
else: |
|
|
else: |
|
|
|
|
|
logger.warning("Incorrect login attempt on user %s by IP %s", username, web.ctx.ip) |
|
|
models.user.set_login_attempts(userid, login_attempts+1, time.time()) |
|
|
models.user.set_login_attempts(userid, login_attempts+1, time.time()) |
|
|
if login_attempts == login_attempts_threshold: |
|
|
if login_attempts == login_attempts_threshold: |
|
|
return render.login(nav, login_form, "- Too many incorrect login attempts. You have to wait a minute before trying again.") |
|
|
return render.login(nav, login_form, "- Too many incorrect login attempts. You have to wait a minute before trying again.") |
|
|
|