From da4c66cc4615d7a40af721057e5a48bd855751c4 Mon Sep 17 00:00:00 2001 From: jakobsn Date: Thu, 28 Nov 2019 12:45:48 +0100 Subject: [PATCH] login --- src/app/models/login.py | 7 +++- src/app/templates/login.html | 2 +- src/app/views/login.py | 76 +++++++++++++++++++----------------- 3 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/app/models/login.py b/src/app/models/login.py index 24efc17..868ff0f 100644 --- a/src/app/models/login.py +++ b/src/app/models/login.py @@ -27,7 +27,10 @@ def get_user_name_by_id(userid): cursor = db.cursor() query = ("SELECT username from users WHERE userid =\"" + userid + "\"") cursor.execute(query) - username = cursor.fetchall()[0][0] + try: + username = cursor.fetchall()[0][0] + except: + username = None cursor.close() return username @@ -45,6 +48,6 @@ def match_user(username, password): query = ("SELECT userid, username from users where username = \"" + username + "\" and password = \"" + password + "\"") cursor.execute(query) - user = cursor.fetchall() + user = cursor.fetchall()[0] cursor.close() return user diff --git a/src/app/templates/login.html b/src/app/templates/login.html index d9c225c..c5a4240 100644 --- a/src/app/templates/login.html +++ b/src/app/templates/login.html @@ -1,4 +1,4 @@ -$def with (nav, login_form, friends) +$def with (nav, login_form) Beelance2 diff --git a/src/app/views/login.py b/src/app/views/login.py index 6804aba..7b2423b 100644 --- a/src/app/views/login.py +++ b/src/app/views/login.py @@ -21,9 +21,48 @@ class Login(): :return: The login page showing other users if logged in """ session = web.ctx.session + nav = get_nav_bar(session) + + # Log the user in if the rememberme cookie is set and valid + self.check_rememberme() + + return render.login(nav, login_form) + + def POST(self): + """ + Log in to the web application and register the session + :return: The login page showing other users if logged in + """ + session = web.ctx.session + nav = get_nav_bar(session) + data = web.input(username="", password="", remember=False) + + # Validate login credential with database query + password_hash = hashlib.md5(b'TDT4237' + data.password.encode('utf-8')).hexdigest() + user = models.login.match_user(data.username, password_hash) + + # If there is a matching user/password in the database the user is logged in + self.login(user[1], user[0], data.remember) + + return render.login(nav, login_form) + + def login(self, username, userid, remember): + """ + Log in to the application + """ + session = web.ctx.session + session.username = username + session.userid = userid + if remember: + rememberme = self.rememberme() + web.setcookie('remember', rememberme , 12000000) + + def check_rememberme(self): + """ + Validate the rememberme cookie and log in + """ username = "" sign = "" - # If the user selected 'remember me' they log in automatically try: # Fetch the users cookies if it exists @@ -41,40 +80,7 @@ class Login(): # If the users signed cookie matches the host signature then log in if self.sign_username(username) == sign: userid = models.login.get_user_id_by_name(username) - session.username = username - session.userid = userid - - # Show a list of registered users when login in - if session.username: - friends = models.login.get_users() - else: - friends = [[],[]] - nav = get_nav_bar(session) - - return render.login(nav, login_form, friends) - - def POST(self): - """ - Log in to the web application and register the session - :return: The login page showing other users if logged in - """ - session = web.ctx.session - friends = [[],[]] - # Validate login credential with database query - data = web.input(username="", password="") - password_hash = hashlib.md5(b'TDT4237' + data.password.encode('utf-8')).hexdigest() - print("hash", password_hash) - user = models.login.match_user(data.username, password_hash) - # If there is a matching user/password in the database the user is logged in - if len(user): - friends = models.login.get_users() - session.username = user[0][1] - session.userid = user[0][0] - if data.remember: - remember = self.rememberme() - web.setcookie('remember', remember , 12000000) - nav = get_nav_bar(session) - return render.login(nav, login_form, friends) + self.login(username, userid, False) def rememberme(self): """