_('New email address'),
[wtforms.validators.Optional(),
normalize_user_or_email_field(allow_user=False)])
- password = wtforms.PasswordField(
- _('Password'),
- [wtforms.validators.Optional(),
- wtforms.validators.Length(min=5, max=1024)],
- description=_(
- 'Enter your old password to prove you own this account.'))
license_preference = wtforms.SelectField(
_('License preference'),
[
user.license_preference = form.license_preference.data
if form.new_email.data:
- if not form.password.data:
- form.password.errors.append(
- _('This field is required.'))
- elif not auth_lib.bcrypt_check_password(
- form.password.data, user.pw_hash):
- form.password.errors.append(
- _('Wrong password.'))
+ new_email = form.new_email.data
+ users_with_email = User.query.filter_by(
+ email=new_email).count()
+ if users_with_email:
+ form.new_email.errors.append(
+ _('Sorry, a user with that email address'
+ ' already exists.'))
else:
- new_email = form.new_email.data
- users_with_email = User.query.filter_by(
- email=new_email).count()
- if users_with_email:
- form.new_email.errors.append(
- _('Sorry, a user with that email address'
- ' already exists.'))
- else:
- verification_key = get_timed_signer_url(
- 'mail_verification_token').dumps({
- 'user': user.id,
- 'email': new_email})
-
- rendered_email = render_template(
- request, 'mediagoblin/edit/verification.txt',
- {'username': user.username,
- 'verification_url': EMAIL_VERIFICATION_TEMPLATE.format(
- uri=request.urlgen('mediagoblin.edit.verify_email',
- qualified=True),
- verification_key=verification_key)})
-
- email_debug_message(request)
- auth_tools.send_verification_email(user, request, new_email,
- rendered_email)
+ verification_key = get_timed_signer_url(
+ 'mail_verification_token').dumps({
+ 'user': user.id,
+ 'email': new_email})
+
+ rendered_email = render_template(
+ request, 'mediagoblin/edit/verification.txt',
+ {'username': user.username,
+ 'verification_url': EMAIL_VERIFICATION_TEMPLATE.format(
+ uri=request.urlgen('mediagoblin.edit.verify_email',
+ qualified=True),
+ verification_key=verification_key)})
+
+ email_debug_message(request)
+ auth_tools.send_verification_email(user, request, new_email,
+ rendered_email)
if not form.errors:
user.save()
def test_email_change(self, test_app):
self.login(test_app)
- # Test email change without password
- template.clear_test_template_context()
- test_app.post(
- '/edit/account/', {
- 'new_email': 'new@example.com'})
-
- # Check form errors
- context = template.TEMPLATE_TEST_CONTEXT[
- 'mediagoblin/edit/edit_account.html']
- assert context['form'].password.errors == [
- u'This field is required.']
-
- # Test email change with wrong password
- template.clear_test_template_context()
- test_app.post(
- '/edit/account/', {
- 'new_email': 'new@example.com',
- 'password': 'wrong'})
-
- # Check form errors
- context = template.TEMPLATE_TEST_CONTEXT[
- 'mediagoblin/edit/edit_account.html']
- assert context['form'].password.errors == [
- u'Wrong password.']
-
# Test email already in db
template.clear_test_template_context()
test_app.post(
assert context['form'].new_email.errors == [
u'Sorry, a user with that email address already exists.']
- # Test password is too short
- template.clear_test_template_context()
- test_app.post(
- '/edit/account/', {
- 'new_email': 'new@example.com',
- 'password': 't'})
-
- # Check form errors
- context = template.TEMPLATE_TEST_CONTEXT[
- 'mediagoblin/edit/edit_account.html']
- assert context['form'].password.errors == [
- u'Field must be between 5 and 1024 characters long.']
-
# Test successful email change
template.clear_test_template_context()
res = test_app.post(