Spaces:
Runtime error
Runtime error
from flask import render_template, redirect, url_for, flash, request | |
from urllib.parse import urlsplit | |
from flask_login import login_user, logout_user, current_user | |
from flask_babel import _ | |
import sqlalchemy as sa | |
from app import db | |
from app.auth import bp | |
from app.auth.forms import LoginForm, RegistrationForm, \ | |
ResetPasswordRequestForm, ResetPasswordForm | |
from app.models import User | |
from app.auth.email import send_password_reset_email | |
def login(): | |
if current_user.is_authenticated: | |
return redirect(url_for('main.index')) | |
form = LoginForm() | |
if form.validate_on_submit(): | |
user = db.session.scalar( | |
sa.select(User).where(User.username == form.username.data)) | |
if user is None or not user.check_password(form.password.data): | |
flash(_('Invalid username or password')) | |
return redirect(url_for('auth.login')) | |
login_user(user, remember=form.remember_me.data) | |
next_page = request.args.get('next') | |
if not next_page or urlsplit(next_page).netloc != '': | |
next_page = url_for('main.index') | |
return redirect(next_page) | |
return render_template('auth/login.html', title=_('Sign In'), form=form) | |
def logout(): | |
logout_user() | |
return redirect(url_for('main.index')) | |
def register(): | |
if current_user.is_authenticated: | |
return redirect(url_for('main.index')) | |
form = RegistrationForm() | |
if form.validate_on_submit(): | |
user = User(username=form.username.data, email=form.email.data) | |
user.set_password(form.password.data) | |
db.session.add(user) | |
db.session.commit() | |
flash(_('Congratulations, you are now a registered user!')) | |
return redirect(url_for('auth.login')) | |
return render_template('auth/register.html', title=_('Register'), | |
form=form) | |
def reset_password_request(): | |
if current_user.is_authenticated: | |
return redirect(url_for('main.index')) | |
form = ResetPasswordRequestForm() | |
if form.validate_on_submit(): | |
user = db.session.scalar( | |
sa.select(User).where(User.email == form.email.data)) | |
if user: | |
send_password_reset_email(user) | |
flash( | |
_('Check your email for the instructions to reset your password')) | |
return redirect(url_for('auth.login')) | |
return render_template('auth/reset_password_request.html', | |
title=_('Reset Password'), form=form) | |
def reset_password(token): | |
if current_user.is_authenticated: | |
return redirect(url_for('main.index')) | |
user = User.verify_reset_password_token(token) | |
if not user: | |
return redirect(url_for('main.index')) | |
form = ResetPasswordForm() | |
if form.validate_on_submit(): | |
user.set_password(form.password.data) | |
db.session.commit() | |
flash(_('Your password has been reset.')) | |
return redirect(url_for('auth.login')) | |
return render_template('auth/reset_password.html', form=form) | |