Skip to content
Snippets Groups Projects
Commit 8786defa authored by Stephan Porada's avatar Stephan Porada :speech_balloon:
Browse files

Add function to change user email

parent 97517339
No related branches found
No related tags found
No related merge requests found
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField, ValidationError from wtforms import StringField, PasswordField, BooleanField, SubmitField, ValidationError, TextAreaField
from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo
from ..models import User from ..models import User
...@@ -76,3 +76,18 @@ class ChangePasswordForm(FlaskForm): ...@@ -76,3 +76,18 @@ class ChangePasswordForm(FlaskForm):
] ]
) )
submit = SubmitField('Update Password') submit = SubmitField('Update Password')
class EditProfileForm(FlaskForm):
email = StringField('Change Email', validators=[Length(0, 64),
DataRequired()])
submit = SubmitField('Change Email')
def __init__(self, user, *args, **kwargs):
super(EditProfileForm, 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!')
...@@ -2,7 +2,7 @@ from flask import flash, redirect, render_template, request, url_for ...@@ -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 flask_login import current_user, login_required, login_user, logout_user
from . import auth from . import auth
from .. import db from .. import db
from .forms import ChangePasswordForm, LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm from .forms import ChangePasswordForm, LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm, EditProfileForm
from ..email import send_email from ..email import send_email
from ..models import User from ..models import User
...@@ -131,9 +131,9 @@ def password_reset(token): ...@@ -131,9 +131,9 @@ def password_reset(token):
title='Password Reset') title='Password Reset')
@auth.route('/settings', methods=['GET', 'POST']) @auth.route('/edit_profile', methods=['GET', 'POST'])
@login_required @login_required
def settings(): def edit_profile():
""" """
View where loged in User can change own User information like Password etc. View where loged in User can change own User information like Password etc.
""" """
...@@ -144,11 +144,19 @@ def settings(): ...@@ -144,11 +144,19 @@ def settings():
db.session.add(current_user) db.session.add(current_user)
db.session.commit() db.session.commit()
flash('Your password has been updated.') flash('Your password has been updated.')
return redirect(url_for('auth.settings')) return redirect(url_for('auth.edit_profile'))
else: else:
flash('Invalid password.') flash('Invalid password.')
change_profile_form = EditProfileForm(user=current_user)
if change_profile_form.validate_on_submit():
current_user.email = change_profile_form.email.data
db.session.add(current_user._get_current_object())
db.session.commit()
flash('Your email has been updated.')
change_profile_form.email.data = current_user.email
return render_template( return render_template(
'auth/settings.html.j2', 'auth/edit_profile.html.j2',
form=change_password_form, change_password_form=change_password_form,
title='Settings' change_profile_form=change_profile_form,
title='Edit Profile'
) )
...@@ -216,6 +216,7 @@ class User(UserMixin, db.Model): ...@@ -216,6 +216,7 @@ class User(UserMixin, db.Model):
jobs[str(job.id)] = job.to_dict() jobs[str(job.id)] = job.to_dict()
return jobs return jobs
class AnonymousUser(AnonymousUserMixin): class AnonymousUser(AnonymousUserMixin):
""" """
Model replaces the default AnonymousUser. Model replaces the default AnonymousUser.
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<span class="card-title">Administration actions</span> <span class="card-title">Administration actions</span>
<!-- Confirm deletion of selected user with modal dialogue <!-- Confirm deletion of selected user with modal dialogue
Modal Trigger--> Modal Trigger-->
<a href="#modal-confirm-delete" class="waves-effect waves-light btn modal-trigger"><i class="material-icons left">delete</i>Delete User</a> <a href="#modal-confirm-delete" class="waves-effect waves-light btn red modal-trigger"><i class="material-icons left">delete</i>Delete User</a>
<!-- Modal Strucutre --> <!-- Modal Strucutre -->
<div id="modal-confirm-delete" class="modal"> <div id="modal-confirm-delete" class="modal">
<div class="modal-content"> <div class="modal-content">
......
...@@ -10,34 +10,58 @@ ...@@ -10,34 +10,58 @@
<div class="card"> <div class="card">
<form method="POST"> <form method="POST">
<div class="card-content"> <div class="card-content">
{{ form.hidden_tag() }} {{ change_password_form.hidden_tag() }}
<div class="input-field "> <div class="input-field ">
<i class="material-icons prefix">vpn_key</i> <i class="material-icons prefix">vpn_key</i>
{{ form.old_password() }} {{ change_password_form.old_password() }}
{{ form.old_password.label }} {{ change_password_form.old_password.label }}
{% for error in form.old_password.errors %} {% for error in change_password_form.old_password.errors %}
<span class="helper-text red-text">{{ error }}</span> <span class="helper-text red-text">{{ error }}</span>
{% endfor %} {% endfor %}
</div> </div>
<div class="input-field"> <div class="input-field">
<i class="material-icons prefix">vpn_key</i> <i class="material-icons prefix">vpn_key</i>
{{ form.new_password() }} {{ change_password_form.new_password() }}
{{ form.new_password.label }} {{ change_password_form.new_password.label }}
{% for error in form.new_password.errors %} {% for error in change_password_form.new_password.errors %}
<span class="helper-text red-text">{{ error }}</span> <span class="helper-text red-text">{{ error }}</span>
{% endfor %} {% endfor %}
</div> </div>
<div class="input-field"> <div class="input-field">
<i class="material-icons prefix">vpn_key</i> <i class="material-icons prefix">vpn_key</i>
{{ form.new_password2() }} {{ change_password_form.new_password2() }}
{{ form.new_password2.label }} {{ change_password_form.new_password2.label }}
{% for error in form.new_password2.errors %} {% for error in change_password_form.new_password2.errors %}
<span class="helper-text red-text">{{ error }}</span> <span class="helper-text red-text">{{ error }}</span>
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
<div class="card-action right-align"> <div class="card-action right-align">
{{ form.submit(class='btn') }} {{ change_password_form.submit(class='btn') }}
</div>
</form>
</div>
</div>
<div class="col s12 m4">
<h3>Change email</h3>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,</p>
</div>
<div class="col s12 m8">
<div class="card">
<form method="POST">
<div class="card-content">
{{ change_profile_form.hidden_tag() }}
<div class="input-field ">
<i class="material-icons prefix">mail</i>
{{ change_profile_form.email() }}
{{ change_profile_form.email.label }}
{% for error in change_profile_form.email.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
</div>
<div class="card-action right-align">
{{ change_profile_form.submit(class='btn') }}
</div> </div>
</form> </form>
</div> </div>
......
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
</div> </div>
<ul id="nav-account-dropdown" class="dropdown-content"> <ul id="nav-account-dropdown" class="dropdown-content">
{% if current_user.is_authenticated %} {% if current_user.is_authenticated %}
<li><a href="{{ url_for('auth.settings') }}"><i class="material-icons">settings</i>Settings</a></li> <li><a href="{{ url_for('auth.edit_profile') }}"><i class="material-icons">edit_profile</i>Edit Profile</a></li>
<li><a href="{{ url_for('auth.logout') }}"><i class="material-icons">chevron_left</i>Log out</a></li> <li><a href="{{ url_for('auth.logout') }}"><i class="material-icons">chevron_left</i>Log out</a></li>
{% else %} {% else %}
<li><a href="{{ url_for('auth.login') }}"><i class="material-icons">chevron_right</i>Log in</a></li> <li><a href="{{ url_for('auth.login') }}"><i class="material-icons">chevron_right</i>Log in</a></li>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment