WMGZON/controllers/web/user.py

100 lines
3.0 KiB
Python
Raw Normal View History

""" The user controller to manage all of the user related endpoints
in the web app
"""
from flask import Blueprint
from flask import render_template, redirect, request, session, flash
from controllers.database.user import UserController
from models.users.user import User
from models.users.customer import Customer
from models.users.seller import Seller
from hashlib import sha512
# Blueprint to append user endpoints to
blueprint = Blueprint("users", __name__)
2024-01-21 22:06:06 +00:00
# LOGIN FUNCTIONALITY
@blueprint.route('/login')
def display_login():
""" Function responsible for delivering the Login page for the site """
return render_template('index.html', content="login.html")
2024-01-21 22:06:06 +00:00
@blueprint.post('/login')
def login():
""" Function to handle the backend processing of a login request """
database = UserController()
user = database.read(request.form['username'])
error = None
# No user found
2024-01-21 22:22:29 +00:00
if user is None:
error = "No user found with the username " + request.form['username']
flash(error)
return redirect("/login")
2024-01-21 22:06:06 +00:00
# Incorrect Password
if sha512(request.form['password'].encode()).hexdigest() != user.password:
error = "Incorrect Password"
flash(error)
return redirect("/login")
session['user_id'] = user.id
return redirect("/")
2024-01-21 22:06:06 +00:00
# SIGNUP FUNCTIONALITY
@blueprint.route('/signup')
def display_signup():
""" Function responsible for delivering the Signup page for the site """
return render_template('index.html', content="signup.html")
2024-01-21 22:06:06 +00:00
@blueprint.post('/signup')
def signup():
""" Function to handle the backend processing of a signup request """
database = UserController()
# User already exists
2024-01-21 22:22:29 +00:00
if database.read(request.form['username']) is not None:
error = "User, " + request.form['username'] + " already exists"
flash(error)
return redirect("/signup")
# Signup as Seller or Customer
if request.form.get('seller'):
user = Seller(
request.form['username'],
2024-01-21 22:06:06 +00:00
# Hashed as soon as it is recieved on the backend
sha512(request.form['password'].encode()).hexdigest(),
request.form['firstname'],
request.form['lastname'],
request.form['email'],
"123"
)
else:
user = Customer(
request.form['username'],
2024-01-21 22:06:06 +00:00
# Hashed as soon as it is recieved on the backend
sha512(request.form['password'].encode()).hexdigest(),
request.form['firstname'],
request.form['lastname'],
request.form['email'],
"123"
)
2024-01-21 22:06:06 +00:00
database.create(user)
# Code 307 Preserves the original request (POST)
return redirect("/login", code=307)
2024-01-21 22:06:06 +00:00
# SIGN OUT FUNCTIONALITY
@blueprint.route('/logout')
def logout():
""" Function responsible for handling logouts from the site """
2024-01-19 12:37:51 +00:00
# Clear the current user from the session if they are logged in
session.pop('user_id', None)
2024-01-21 22:06:06 +00:00
return redirect("/")