From 6f9607dcd9e9559922f38274974808d8b63efc38 Mon Sep 17 00:00:00 2001 From: jakobsn Date: Thu, 28 Nov 2019 15:39:58 +0100 Subject: [PATCH] add validators to register form --- src/app/models/login.py | 5 ++++- src/app/views/forms.py | 23 +++++++++++++++-------- src/app/views/login.py | 5 +++-- src/app/views/register.py | 29 +++++++++-------------------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/app/models/login.py b/src/app/models/login.py index 868ff0f..2abb2bf 100644 --- a/src/app/models/login.py +++ b/src/app/models/login.py @@ -48,6 +48,9 @@ def match_user(username, password): query = ("SELECT userid, username from users where username = \"" + username + "\" and password = \"" + password + "\"") cursor.execute(query) - user = cursor.fetchall()[0] + try: + user = cursor.fetchall()[0] + except: + user = None cursor.close() return user diff --git a/src/app/views/forms.py b/src/app/views/forms.py index 5211564..f5d6720 100644 --- a/src/app/views/forms.py +++ b/src/app/views/forms.py @@ -1,6 +1,7 @@ from web import form from models.project import get_categories -from models.login import get_users +from models.login import get_users, get_user_id_by_name + # Define the login form login_form = form.Form( @@ -10,20 +11,26 @@ login_form = form.Form( form.Button("Log In", type="submit", description="Login"), ) +vemail = form.regexp(r".*@.*", "- Must be a valid email address") +vpass = form.regexp(r".{6,100}$", '- Must be atleast 6 characters long') +num = form.regexp(r"^[1-9]+$", "- Must be a number") # Define the register form register_form = form.Form( form.Textbox("username", description="Username"), form.Textbox("full_name", description="Full name"), form.Textbox("company", description="Company"), - form.Textbox("email", description="Email Address"), + form.Textbox("email", vemail, description="Email Address"), form.Textbox("phone_number", description="Phone Number"), form.Textbox("street_address", description="Street address"), form.Textbox("city", description="City"), form.Textbox("state", description="State"), - form.Textbox("postal_code", description="Postal code"), + form.Textbox("postal_code", num, description="Postal code"), form.Textbox("country", description="Country"), - form.Password("password", description="Password"), + form.Password("password", vpass, description="Password"), form.Button("Register", type="submit", description="Register"), + validators = [ + form.Validator("User already exists", lambda i: models.login.get_user_id_by_name(i.username) == None) + ] ) def get_task_form_elements(identifier=0, task_title="", task_description="", budget=""): @@ -40,9 +47,9 @@ def get_task_form_elements(identifier=0, task_title="", task_description="", bud :return: A set of task form elements """ task_form_elements = ( - form.Textbox("task_title_" + str(identifier), description="Title", value=task_title), - form.Textarea("task_description_" + str(identifier), description="Description", value=task_description), - form.Textbox("budget_" + str(identifier), description="Budget", value=str(budget)) + form.Textbox("task_title_" + str(identifier), description="Task title", value=task_title), + form.Textarea("task_description_" + str(identifier), description="Task description", value=task_description), + form.Textbox("budget_" + str(identifier), description="Task budget", value=str(budget)) ) return task_form_elements @@ -61,7 +68,7 @@ def get_project_form_elements(project_title="", project_description="", category project_form_elements = ( form.Textbox("project_title", description="Title", value=project_title), form.Textarea("project_description", description="Description", value=project_description), - form.Dropdown("category_name", description="Category Name", args=categories) + form.Dropdown("category_name", description="Category", args=categories) ) return project_form_elements diff --git a/src/app/views/login.py b/src/app/views/login.py index 7b2423b..3f5208d 100644 --- a/src/app/views/login.py +++ b/src/app/views/login.py @@ -40,9 +40,10 @@ class Login(): # 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) + if user: + self.login(user[1], user[0], data.remember) return render.login(nav, login_form) diff --git a/src/app/views/register.py b/src/app/views/register.py index e7ececa..287fd38 100644 --- a/src/app/views/register.py +++ b/src/app/views/register.py @@ -31,26 +31,15 @@ class Register: session = web.ctx.session nav = get_nav_bar(session) data = web.input() - message = "" - - # Check if user exists - if models.login.get_user_id_by_name(data.username): - message += "Invalid user, already exists. " - - # Check if email is valid - if not re.match(r"[^@]+@[^@]+\.[^@]+", data.email): - message += "Invalid email address. " - - # Check if password is valid - if not len(data.password) > 5: - message += "Invalid password, must be atleast 6 characters long. " - - # Register user if input is valid - if len(message) == 0: - models.register.set_user(data.username, hashlib.md5(b'TDT4237' + data.password.encode('utf-8')).hexdigest(), - data.full_name, data.email, data.company, data.phone_number, data.street_address, - data.city, data.state, data.postal_code, data.country) - message += "User Registered. " + + r = register_form() + if not r.validates(): + return render.register(nav, r, "All fields must be valid.") + + models.register.set_user(data.username, hashlib.md5(b'TDT4237' + data.password.encode('utf-8')).hexdigest(), + data.full_name, data.email, data.company, data.phone_number, data.street_address, + data.city, data.state, data.postal_code, data.country) + message += "User registered!" return render.register(nav, register_form, message)