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) | |