View raw

1 # -*- mode: python; -*- 2 3 from flask import Blueprint, render_template, redirect, url_for, request, flash 4 from flask_login import login_user, login_required, logout_user 5 from werkzeug.security import generate_password_hash, check_password_hash 6 7 from ... import db 8 from ...models import User 9 from .forms import LoginForm, RegisterForm 10 11 12 auth = Blueprint("auth", __name__) 13 14 15 @auth.route("/login", methods=["GET", "POST"]) 16 def login(): 17 form = LoginForm() 18 if form.validate_on_submit(): 19 req = request.form 20 # print(req["remember"]) 21 remember = True if req.get("remember") else False 22 user = User.query.filter_by(username=req["username"]).first() 23 if user is None: 24 flash("User not registered.", "error") 25 return redirect(url_for("auth.register")) 26 if check_password_hash(user.hashed_password, req["password"]) is False: 27 flash("Wrong password.", "error") 28 return redirect(url_for("auth.login")) 29 login_user(user, remember=remember) 30 flash( 31 f"Logged in as user {user.username} successfully. " 32 + f"You will {'not' if remember is False else ''} be remembered next time!" 33 ) 34 return redirect(url_for("main.home")) 35 return render_template("modules/login.html", form=form) 36 37 38 @auth.route("/register", methods=["GET", "POST"]) 39 def register(): 40 form = RegisterForm() 41 if form.validate_on_submit(): 42 req = request.form 43 user_already_exists = User.query.filter_by( 44 name_first=req["name_first"], 45 name_last=req["name_last"], 46 ).first() 47 if user_already_exists: 48 flash( 49 f"User {req['name_first']} {req['name_last']} already exists.", "error" 50 ) 51 return redirect(url_for("auth.login")) 52 new_user = User( 53 username=req["username"], 54 hashed_password=generate_password_hash(req["password"], method="sha256"), 55 name_first=req["name_first"], 56 name_last=req["name_last"], 57 email=req["email"], 58 phone_mobile=req["phone_mobile"], 59 phone_alternative=req["phone_alternative"], 60 ) 61 db.session.add(new_user) 62 db.session.commit() 63 flash(f"Created user {req['name_first']} {req['name_last']} successfully.") 64 return redirect(url_for("main.home")) 65 return render_template("modules/register.html", form=form) 66 67 68 @auth.route("/logout") 69 @login_required 70 def logout(): 71 logout_user() 72 flash(f"Logged out successfully.") 73 return redirect(url_for("main.home")) 74