mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +00:00 
			
		
		
		
	Rework settings page.
This commit is contained in:
		@@ -1,44 +1,38 @@
 | 
			
		||||
from app.models import User
 | 
			
		||||
from flask_wtf import FlaskForm
 | 
			
		||||
from wtforms import (PasswordField, StringField, SubmitField,
 | 
			
		||||
                     ValidationError, BooleanField)
 | 
			
		||||
from wtforms.validators import DataRequired, EqualTo, Email
 | 
			
		||||
from wtforms import (BooleanField, PasswordField, StringField, SubmitField,
 | 
			
		||||
                     ValidationError)
 | 
			
		||||
from wtforms.validators import DataRequired, Email, EqualTo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ChangePasswordForm(FlaskForm):
 | 
			
		||||
    """
 | 
			
		||||
    Form to change information of currently logged in User. User can change
 | 
			
		||||
    informations about him on his own.
 | 
			
		||||
    """
 | 
			
		||||
    old_password = PasswordField('Old password', validators=[DataRequired()])
 | 
			
		||||
    new_password = PasswordField(
 | 
			
		||||
class EditEmailForm(FlaskForm):
 | 
			
		||||
    email = StringField('New email', validators=[Email(), DataRequired()])
 | 
			
		||||
    save_email = SubmitField('Save Email')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EditGeneralSettingsForm(FlaskForm):
 | 
			
		||||
    dark_mode = BooleanField('Dark mode')
 | 
			
		||||
    save_settings = SubmitField('Save Settings')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EditPasswordForm(FlaskForm):
 | 
			
		||||
    current_password = PasswordField('Current password',
 | 
			
		||||
                                     validators=[DataRequired()])
 | 
			
		||||
    password = PasswordField(
 | 
			
		||||
        'New password',
 | 
			
		||||
        validators=[DataRequired(),
 | 
			
		||||
                    EqualTo('new_password2', message='Passwords must match.')]
 | 
			
		||||
        validators=[DataRequired(), EqualTo('password_confirmation',
 | 
			
		||||
                                            message='Passwords must match.')]
 | 
			
		||||
    )
 | 
			
		||||
    new_password2 = PasswordField(
 | 
			
		||||
        'Confirm new password',
 | 
			
		||||
    password_confirmation = PasswordField(
 | 
			
		||||
        'Password confirmation',
 | 
			
		||||
        validators=[DataRequired(),
 | 
			
		||||
                    EqualTo('new_password', message='Passwords must match.')]
 | 
			
		||||
                    EqualTo('password', message='Passwords must match.')]
 | 
			
		||||
    )
 | 
			
		||||
    submit = SubmitField('Update Password')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EditProfileForm(FlaskForm):
 | 
			
		||||
    email = StringField('Change Email',
 | 
			
		||||
                        validators=[Email(), DataRequired()])
 | 
			
		||||
    submit = SubmitField('Change Email')
 | 
			
		||||
    save_password = SubmitField('Save Password')
 | 
			
		||||
 | 
			
		||||
    def __init__(self, user, *args, **kwargs):
 | 
			
		||||
        super(EditProfileForm, self).__init__(*args, **kwargs)
 | 
			
		||||
        super(EditPasswordForm, self).__init__(*args, **kwargs)
 | 
			
		||||
        self.user = user
 | 
			
		||||
 | 
			
		||||
    def validate_email(self, field):
 | 
			
		||||
        if field.data != self.user.email and \
 | 
			
		||||
                User.query.filter_by(email=field.data).first():
 | 
			
		||||
            raise ValidationError('Email already registered!')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EditUserSettingsForm(FlaskForm):
 | 
			
		||||
    is_dark = BooleanField('Dark Mode')
 | 
			
		||||
    submit = SubmitField('Save Settings')
 | 
			
		||||
    def validate_current_password(self, field):
 | 
			
		||||
        if not self.user.verify_password(field.data):
 | 
			
		||||
            raise ValidationError('Invalid password.')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,102 +1,65 @@
 | 
			
		||||
from app import db, logger
 | 
			
		||||
from flask import abort, current_app, flash, redirect, render_template, url_for
 | 
			
		||||
from app import db
 | 
			
		||||
from flask import current_app, flash, redirect, render_template, url_for
 | 
			
		||||
from flask_login import current_user, login_required, logout_user
 | 
			
		||||
from threading import Thread
 | 
			
		||||
from . import profile
 | 
			
		||||
from .background_functions import delete_user_
 | 
			
		||||
from .forms import ChangePasswordForm, EditProfileForm, EditUserSettingsForm
 | 
			
		||||
from .forms import EditEmailForm, EditGeneralSettingsForm, EditPasswordForm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@profile.route('/', methods=['GET', 'POST'])
 | 
			
		||||
@profile.route('/settings', methods=['GET', 'POST'])
 | 
			
		||||
@login_required
 | 
			
		||||
def index():
 | 
			
		||||
    """
 | 
			
		||||
    View where loged in User can change own User information like Password etc.
 | 
			
		||||
    """
 | 
			
		||||
    edit_user_info_form = EditProfileForm(user=current_user)
 | 
			
		||||
    edit_user_info_form.email.data = current_user.email
 | 
			
		||||
    return render_template('profile/index.html.j2',
 | 
			
		||||
                           change_password_form=ChangePasswordForm(),
 | 
			
		||||
                           edit_user_info_form=edit_user_info_form,
 | 
			
		||||
                           edit_user_settings_form=EditUserSettingsForm(),
 | 
			
		||||
                           title='Profile')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@profile.route('/change_password', methods=['POST'])
 | 
			
		||||
@login_required
 | 
			
		||||
def profile_change_password():
 | 
			
		||||
    edit_user_info_form = EditProfileForm(user=current_user)
 | 
			
		||||
    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)
 | 
			
		||||
            db.session.commit()
 | 
			
		||||
            flash('Your password has been updated.')
 | 
			
		||||
            return render_template('profile/index.html.j2',
 | 
			
		||||
                                   change_password_form=change_password_form,
 | 
			
		||||
                                   edit_user_info_form=edit_user_info_form,
 | 
			
		||||
                                   edit_user_settings_form=EditUserSettingsForm(),
 | 
			
		||||
                                   title='Profile')
 | 
			
		||||
    else:
 | 
			
		||||
        flash('Invalid password.')
 | 
			
		||||
    return render_template('profile/index.html.j2',
 | 
			
		||||
                           change_password_form=change_password_form,
 | 
			
		||||
                           edit_user_info_form=edit_user_info_form,
 | 
			
		||||
                           edit_user_settings_form=EditUserSettingsForm(),
 | 
			
		||||
                           title='Profile')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@profile.route('/edit_user_info', methods=['POST'])
 | 
			
		||||
@login_required
 | 
			
		||||
def profile_edit_user_info():
 | 
			
		||||
    edit_user_info_form = EditProfileForm(user=current_user)
 | 
			
		||||
    if edit_user_info_form.validate_on_submit():
 | 
			
		||||
        current_user.email = edit_user_info_form.email.data
 | 
			
		||||
        db.session.add(current_user._get_current_object())
 | 
			
		||||
def settings():
 | 
			
		||||
    edit_email_form = EditEmailForm(prefix='edit-email-form')
 | 
			
		||||
    edit_general_settings_form = EditGeneralSettingsForm(
 | 
			
		||||
        prefix='edit-settings-form'
 | 
			
		||||
    )
 | 
			
		||||
    edit_password_form = EditPasswordForm(prefix='edit-password-form',
 | 
			
		||||
                                          user=current_user)
 | 
			
		||||
    # Check if edit_email_form is submitted and valid
 | 
			
		||||
    if (edit_email_form.save_email.data
 | 
			
		||||
            and edit_email_form.validate_on_submit()):
 | 
			
		||||
        db.session.add(current_user)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        flash('Your email has been updated.')
 | 
			
		||||
    else:
 | 
			
		||||
        logger.warning('Form: {}'.format(edit_user_info_form.errors))
 | 
			
		||||
        return render_template('profile/index.html.j2',
 | 
			
		||||
                               change_password_form=ChangePasswordForm(),
 | 
			
		||||
                               edit_user_info_form=edit_user_info_form,
 | 
			
		||||
                               edit_user_settings_form=EditUserSettingsForm(),
 | 
			
		||||
                               title='Profile')
 | 
			
		||||
    edit_user_info_form.email.data = current_user.email
 | 
			
		||||
    return render_template('profile/index.html.j2',
 | 
			
		||||
                           change_password_form=ChangePasswordForm(),
 | 
			
		||||
                           edit_user_info_form=EditProfileForm(user=current_user),
 | 
			
		||||
                           edit_user_settings_form=EditUserSettingsForm(),
 | 
			
		||||
                           title='Profile')
 | 
			
		||||
        flash('Your email address has been updated.')
 | 
			
		||||
        return redirect(url_for('profile.settings'))
 | 
			
		||||
    # Check if edit_settings_form is submitted and valid
 | 
			
		||||
    if (edit_general_settings_form.save_settings.data
 | 
			
		||||
            and edit_general_settings_form.validate_on_submit()):
 | 
			
		||||
        current_user.is_dark = edit_general_settings_form.dark_mode.data
 | 
			
		||||
        db.session.add(current_user)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        flash('Your settings have been updated.')
 | 
			
		||||
        return redirect(url_for('profile.settings'))
 | 
			
		||||
    # Check if edit_password_form is submitted and valid
 | 
			
		||||
    if (edit_password_form.save_password.data
 | 
			
		||||
            and edit_password_form.validate_on_submit()):
 | 
			
		||||
        current_user.password = edit_password_form.password.data
 | 
			
		||||
        db.session.add(current_user)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        flash('Your password has been updated.')
 | 
			
		||||
        return redirect(url_for('profile.settings'))
 | 
			
		||||
    # If no form is submitted or valid, fill out fields with current values
 | 
			
		||||
    edit_email_form.email.data = current_user.email
 | 
			
		||||
    edit_general_settings_form.dark_mode.data = current_user.is_dark
 | 
			
		||||
    return render_template(
 | 
			
		||||
        'profile/settings.html.j2',
 | 
			
		||||
        edit_email_form=edit_email_form,
 | 
			
		||||
        edit_password_form=edit_password_form,
 | 
			
		||||
        edit_general_settings_form=edit_general_settings_form,
 | 
			
		||||
        title='Settings'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@profile.route('/edit_user_settings', methods=['POST'])
 | 
			
		||||
@profile.route('/delete', methods=['GET', 'POST'])
 | 
			
		||||
@login_required
 | 
			
		||||
def profile_edit_user_settings():
 | 
			
		||||
    edit_user_settings_form = EditUserSettingsForm()
 | 
			
		||||
    if not edit_user_settings_form.validate_on_submit():
 | 
			
		||||
        abort(400)
 | 
			
		||||
    current_user.is_dark = edit_user_settings_form.is_dark.data
 | 
			
		||||
    logger.warning('Form data: {}'.format(current_user.is_dark))
 | 
			
		||||
    db.session.add(current_user)
 | 
			
		||||
    db.session.commit()
 | 
			
		||||
    if current_user.is_dark is True:
 | 
			
		||||
        flash('Dark mode has been activated!')
 | 
			
		||||
    else:
 | 
			
		||||
        flash('Dark mode has been deactivated!')
 | 
			
		||||
    return redirect(url_for('profile.index'))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@profile.route('/delete_self', methods=['GET', 'POST'])
 | 
			
		||||
@login_required
 | 
			
		||||
def delete_self():
 | 
			
		||||
def delete():
 | 
			
		||||
    """
 | 
			
		||||
    View to delete yourslef and all associated data.
 | 
			
		||||
    """
 | 
			
		||||
    logout_user()
 | 
			
		||||
    thread = Thread(target=delete_user_,
 | 
			
		||||
                    args=(current_app._get_current_object(), current_user.id))
 | 
			
		||||
    thread.start()
 | 
			
		||||
    logout_user()
 | 
			
		||||
    flash('Your account has been deleted!')
 | 
			
		||||
    return redirect(url_for('main.index'))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user