From 735802d88e79cb0dec05b6d73a54b0a72a4e4477 Mon Sep 17 00:00:00 2001 From: Patrick Jentsch Date: Fri, 12 Jul 2019 17:23:11 +0200 Subject: [PATCH] Remove options to change username and email. --- app/auth/forms.py | 62 ++++++++++++++++++++++++++--------------------- app/auth/views.py | 34 ++++++++++++-------------- app/main/views.py | 7 +++++- 3 files changed, 56 insertions(+), 47 deletions(-) diff --git a/app/auth/forms.py b/app/auth/forms.py index 576c4b00..841dfc5f 100644 --- a/app/auth/forms.py +++ b/app/auth/forms.py @@ -1,6 +1,6 @@ from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, SubmitField -from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo, Optional +from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo from wtforms import ValidationError from ..models import User @@ -13,8 +13,7 @@ class LoginForm(FlaskForm): class RegistrationForm(FlaskForm): - email = StringField('Email', validators=[DataRequired(), Length(1, 64), - Email()]) + email = StringField('Email', validators=[DataRequired(), Email()]) username = StringField('Username', validators=[ DataRequired(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, @@ -35,39 +34,46 @@ class RegistrationForm(FlaskForm): class PasswordResetForm(FlaskForm): - password = PasswordField('New Password', validators=[ - DataRequired(), EqualTo('password2', message='Passwords must match')]) - password2 = PasswordField('Confirm password', validators=[DataRequired()]) + password = PasswordField( + 'New Password', + validators=[ + DataRequired(), + EqualTo('password2', message='Passwords must match') + ] + ) + password2 = PasswordField( + 'Confirm password', + validators=[ + DataRequired(), + EqualTo('password', message='Passwords must match.') + ] + ) submit = SubmitField('Reset Password') class PasswordResetRequestForm(FlaskForm): - email = StringField('Email', validators=[DataRequired(), Length(1, 64), - Email()]) + email = StringField('Email', validators=[DataRequired(), Email()]) submit = SubmitField('Reset Password') -class ChangeAccountForm(FlaskForm): +class ChangePasswordForm(FlaskForm): """ Form to change information of currently logged in User. User can change informations about him on his own. """ - email = StringField('Email', validators=[Optional(), Length(1, 64), - Email()]) - username = StringField('Username', validators=[ - Optional(), Length(1, 64), - Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, - 'Usernames must have only letters, numbers, dots or ' - 'underscores')]) - password = PasswordField('Password', validators=[ - Optional(), EqualTo('password2', message='Passwords must match.')]) - password2 = PasswordField('Confirm password', validators=[Optional()]) - submit = SubmitField('Submit') - - def validate_email(self, field): - if User.query.filter_by(email=field.data.lower()).first(): - raise ValidationError('Email already registered.') - - def validate_username(self, field): - if User.query.filter_by(username=field.data).first(): - raise ValidationError('Username already in use.') + old_password = PasswordField('Old password', validators=[DataRequired()]) + new_password = PasswordField( + 'New password', + validators=[ + DataRequired(), + EqualTo('new_password2', message='Passwords must match.') + ] + ) + new_password2 = PasswordField( + 'Confirm new password', + validators=[ + DataRequired(), + EqualTo('new_password', message='Passwords must match.') + ] + ) + submit = SubmitField('Update Password') diff --git a/app/auth/views.py b/app/auth/views.py index c8154cd4..0e8859a9 100644 --- a/app/auth/views.py +++ b/app/auth/views.py @@ -2,7 +2,7 @@ from flask import flash, redirect, render_template, request, url_for from flask_login import current_user, login_required, login_user, logout_user from . import auth from .. import db -from .forms import ChangeAccountForm, LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm +from .forms import ChangePasswordForm, LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm from ..email import send_email from ..models import User @@ -20,7 +20,7 @@ def login(): if next is None or not next.startswith('/'): next = url_for('main.index') return redirect(next) - flash('Invalid username or password.') + flash('Invalid username or password.') return render_template('auth/login.html.j2', form=form, title='Log in') @@ -135,20 +135,18 @@ def settings(): """ View where loged in User can change own User information like Password etc. """ - form = ChangeAccountForm() - if form.validate_on_submit(): - flash('It is just a test, nothing changed.') - if form.username.data: - current_user.username = form.username.data + change_password_form = ChangePasswordForm() + if change_password_form.validate_on_submit(): + if current_user.verify_password(change_password_form.old_password.data): + current_user.password = change_password_form.new_password.data db.session.add(current_user) - if form.email.data: - current_user.email = form.email.data - current_user.confirmed = False - db.session.add(current_user) - resend_confirmation() - if form.password.data: - current_user.password = form.password.data - db.session.commit() - return redirect(url_for('auth.settings')) - return render_template('auth/settings.html.j2', form=form, - title='Settings') + db.session.commit() + flash('Your password has been updated.') + return redirect(url_for('auth.settings')) + else: + flash('Invalid password.') + return render_template( + 'auth/settings.html.j2', + form=change_password_form, + title='Settings' + ) diff --git a/app/main/views.py b/app/main/views.py index 64d36be4..2f7fce7a 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -11,6 +11,11 @@ def index(): return render_template('main/index.html.j2', title='Portal') +@main.route('/about') +def about(): + return render_template('main/about.html.j2', title='About') + + @main.route('/admin') @login_required @admin_required @@ -21,5 +26,5 @@ def for_admins_only(): users = User.query.order_by(User.username).all() items = [AdminUserItem(u.username, u.email, u.role_id, u.confirmed) for u in users] table = AdminUserTable(items) - return render_template('main/admin.html.j2', title='Administration Tools', + return render_template('main/admin.html.j2', title='Administration tools', table=table.__html__())