diff options
author | Cara Salter <cara@devcara.com> | 2022-09-20 17:58:27 -0400 |
---|---|---|
committer | Cara Salter <cara@devcara.com> | 2022-09-20 17:58:27 -0400 |
commit | b1ffd5220866dc9479fa284dfb2f0a0e111a6031 (patch) | |
tree | c63661f965a4a4e99888f23f28619d5a61e7244a /app/auth | |
parent | e549bc0a5c39e85fb94cb289497f1b245b564947 (diff) | |
download | nccd-b1ffd5220866dc9479fa284dfb2f0a0e111a6031.tar.gz nccd-b1ffd5220866dc9479fa284dfb2f0a0e111a6031.zip |
auth
Diffstat (limited to 'app/auth')
-rw-r--r-- | app/auth/__init__.py | 75 | ||||
-rw-r--r-- | app/auth/forms.py | 15 |
2 files changed, 85 insertions, 5 deletions
diff --git a/app/auth/__init__.py b/app/auth/__init__.py index 52f0cd7..b419351 100644 --- a/app/auth/__init__.py +++ b/app/auth/__init__.py @@ -1,3 +1,76 @@ -from flask import Blueprint +from flask import Blueprint, request, redirect, url_for, flash, render_template +from flask_login import current_user, login_user +from werkzeug.security import check_password_hash, generate_password_hash + +from app.auth.forms import LoginForm, RegisterForm +from app.database import User +from app import db + +import ulid bp = Blueprint('auth', __name__, url_prefix='/auth') + +@bp.route("/login", methods=["GET", "POST"]) +def login(): + if current_user.is_authenticated: + flash("You are already logged in") + return redirect(url_for("meta.home")) + + form = LoginForm(request.form) + + if request.method == 'POST' and form.validate(): + email = request.form.get('username') + password = request.form.get('password') + + u = User.query.fetch_one().filter_by(email=email) + + if u is not None: + if check_password_hash(u.password, password): + login_user(u) + + flash("Logged in successfully") + + return redirect(url_for("meta.home")) + + else: + flash("Incorrect password") + else: + flash("Incorrect username") + + return render_template("login.html", form=form) + +@bp.route("/register", methods=["GET", "POST"]) +def register(): + if current_user.is_authenticated: + flash("You are already logged in") + return redirect(url_for("meta.home")) + + form = RegisterForm(request.form) + + if request.method == 'POST' and form.validate(): + email = request.form.get("username") + pref_name = request.form.get("pref_name") + password = request.form.get("password") + pw_confirm = request.form.get("password_confirm") + + if password == pw_confirm: + # Passwords match + + user = User( + id=str(ulid.new()), + email=email, + password=generate_password_hash(password), + pref_name=pref_name, + last_login=datetime.now(), + active=True + ) + + db.session.add(user) + db.session.commit() + flask_login.login_user(user) + + return redirect(url_for('meta.home')) + else: + flash("Passwords do not match") + + return render_template("register.html") diff --git a/app/auth/forms.py b/app/auth/forms.py index 4814f48..778e4fb 100644 --- a/app/auth/forms.py +++ b/app/auth/forms.py @@ -1,7 +1,14 @@ -from flask_security.forms import RegisterForm -from wtforms import StringField +from flask_wtf import FlaskForm +from wtforms.fields.simple import PasswordField, StringField, SubmitField from wtforms.validators import DataRequired -class ExtendedRegister(RegisterForm): - pref_name = StringField('Preferred Name', [DataRequired()]) +class LoginForm(FlaskForm): + username = StringField("Email", validators=[DataRequired()]) + password = PasswordField("Password", validators=[DataRequired()]) + submit = SubmitField("Sign in") +class RegisterForm(FlaskForm): + username = StringField("Email", validators=[DataRequired()]) + password = PasswordField("Password", validators=[DataRequired()]) + password_confirm = PasswordField("Confirm Password", validators=[DataRequired()]) + submit = SubmitField("Register") |