from flask import flash, redirect, render_template, url_for from flask_login import current_user, login_required, logout_user from . import bp, tasks from .forms import (ChangePasswordForm, EditGeneralSettingsForm, EditNotificationSettingsForm) from .. import db @bp.route('/') @login_required def index(): return redirect(url_for('.edit_general_settings')) @bp.route('/change_password', methods=['GET', 'POST']) @login_required def change_password(): form = ChangePasswordForm(current_user._get_current_object()) if form.validate_on_submit(): current_user.password = form.new_password.data db.session.commit() flash('Your password has been updated.') return redirect(url_for('.change_password')) return render_template('settings/change_password.html.j2', form=form, title='Change password') @bp.route('/edit_general_settings', methods=['GET', 'POST']) @login_required def edit_general_settings(): form = EditGeneralSettingsForm(current_user._get_current_object()) if form.validate_on_submit(): current_user.email = form.email.data current_user.setting_dark_mode = form.dark_mode.data current_user.username = form.username.data db.session.commit() flash('Your changes have been saved.') return redirect(url_for('.edit_general_settings')) form.dark_mode.data = current_user.setting_dark_mode form.email.data = current_user.email form.username.data = current_user.username return render_template('settings/edit_general_settings.html.j2', form=form, title='General settings') @bp.route('/edit_notification_settings', methods=['GET', 'POST']) @login_required def edit_notification_settings(): form = EditNotificationSettingsForm() if form.validate_on_submit(): current_user.setting_job_status_mail_notifications = \ form.job_status_mail_notifications.data current_user.setting_job_status_site_notifications = \ form.job_status_site_notifications.data db.session.commit() flash('Your changes have been saved.') return redirect(url_for('.edit_notification_settings')) form.job_status_mail_notifications.data = \ current_user.setting_job_status_mail_notifications form.job_status_site_notifications.data = \ current_user.setting_job_status_site_notifications return render_template('settings/edit_notification_settings.html.j2', form=form, title='Notification settings') @bp.route('/delete') @login_required def delete(): """ View to delete current_user and all associated data. """ tasks.delete_user(current_user.id) logout_user() flash('Your account has been marked for deletion!') return redirect(url_for('main.index'))