|
|
|
@@ -6,10 +6,14 @@ from views.utils import get_nav_bar |
|
|
|
import random |
|
|
|
import string |
|
|
|
import hashlib |
|
|
|
import time |
|
|
|
|
|
|
|
# Get html templates |
|
|
|
render = web.template.render('templates/') |
|
|
|
|
|
|
|
# The remember cookie should be valid for a week |
|
|
|
remember_timeout = 3600*24*7 |
|
|
|
|
|
|
|
|
|
|
|
class Login(): |
|
|
|
|
|
|
|
@@ -58,8 +62,8 @@ class Login(): |
|
|
|
session.username = username |
|
|
|
session.userid = userid |
|
|
|
if remember: |
|
|
|
rememberme = self.rememberme() |
|
|
|
web.setcookie('remember', rememberme , 300000000) |
|
|
|
rememberme = self.rememberme(remember_timeout) |
|
|
|
web.setcookie('remember', rememberme , remember_timeout) |
|
|
|
|
|
|
|
def check_rememberme(self): |
|
|
|
""" |
|
|
|
@@ -72,17 +76,17 @@ class Login(): |
|
|
|
cookies = web.cookies() |
|
|
|
# Fetch the remember cookie and convert from string to bytes |
|
|
|
remember_token = cookies.remember |
|
|
|
userid = models.session.get_cookie(remember_token) |
|
|
|
except AttributeError as e: |
|
|
|
userid, expiry = models.session.get_cookie(remember_token) |
|
|
|
except AttributeError: |
|
|
|
# The user did not have the stored remember me cookie |
|
|
|
pass |
|
|
|
|
|
|
|
# If the users signed cookie matches the host signature then log in |
|
|
|
if userid is not None: |
|
|
|
if userid is not None and expiry > time.time(): |
|
|
|
username = models.user.get_user_name_by_id(userid) |
|
|
|
self.login(username, userid, False) |
|
|
|
|
|
|
|
def rememberme(self): |
|
|
|
def rememberme(self, timeout): |
|
|
|
""" |
|
|
|
Generate a random token for the user, and store it in the database. |
|
|
|
""" |
|
|
|
@@ -91,8 +95,8 @@ class Login(): |
|
|
|
|
|
|
|
while True: |
|
|
|
token = ''.join(random.SystemRandom().choice(alphabet) for _ in range(20)) |
|
|
|
if models.session.get_cookie(token) is None: |
|
|
|
if models.session.get_cookie(token)[0] is None: |
|
|
|
break |
|
|
|
|
|
|
|
models.session.set_cookie(session.userid, token) |
|
|
|
models.session.set_cookie(session.userid, token, int(time.time() + timeout)) |
|
|
|
return token |