|
|
@ -1,4 +1,4 @@
|
|
|
|
from mailu import models
|
|
|
|
from mailu import models, utils
|
|
|
|
from mailu.ui import ui, access, forms
|
|
|
|
from mailu.ui import ui, access, forms
|
|
|
|
from flask import current_app as app
|
|
|
|
from flask import current_app as app
|
|
|
|
|
|
|
|
|
|
|
@ -28,13 +28,8 @@ def user_create(domain_name):
|
|
|
|
form.quota_bytes.validators = [
|
|
|
|
form.quota_bytes.validators = [
|
|
|
|
wtforms.validators.NumberRange(max=domain.max_quota_bytes)]
|
|
|
|
wtforms.validators.NumberRange(max=domain.max_quota_bytes)]
|
|
|
|
if form.validate_on_submit():
|
|
|
|
if form.validate_on_submit():
|
|
|
|
if len(form.pw.data) < 8:
|
|
|
|
if msg := utils.isBadOrPwned(form):
|
|
|
|
flask.flash("This password is too short.", "error")
|
|
|
|
flask.flash(msg, "error")
|
|
|
|
return flask.render_template('user/create.html',
|
|
|
|
|
|
|
|
domain=domain, form=form)
|
|
|
|
|
|
|
|
breaches = int(form.pwned.data)
|
|
|
|
|
|
|
|
if breaches > 0:
|
|
|
|
|
|
|
|
flask.flash(f"This password appears in {breaches} data breaches! Please change it.", "error")
|
|
|
|
|
|
|
|
return flask.render_template('user/create.html',
|
|
|
|
return flask.render_template('user/create.html',
|
|
|
|
domain=domain, form=form)
|
|
|
|
domain=domain, form=form)
|
|
|
|
if domain.has_email(form.localpart.data):
|
|
|
|
if domain.has_email(form.localpart.data):
|
|
|
@ -69,13 +64,8 @@ def user_edit(user_email):
|
|
|
|
form.quota_bytes.validators = [
|
|
|
|
form.quota_bytes.validators = [
|
|
|
|
wtforms.validators.NumberRange(max=max_quota_bytes)]
|
|
|
|
wtforms.validators.NumberRange(max=max_quota_bytes)]
|
|
|
|
if form.validate_on_submit():
|
|
|
|
if form.validate_on_submit():
|
|
|
|
if len(form.pw.data) < 8:
|
|
|
|
if msg := utils.isBadOrPwned(form):
|
|
|
|
flask.flash("This password is too short.", "error")
|
|
|
|
flask.flash(msg, "error")
|
|
|
|
return flask.render_template('user/edit.html', form=form, user=user,
|
|
|
|
|
|
|
|
domain=user.domain, max_quota_bytes=max_quota_bytes)
|
|
|
|
|
|
|
|
breaches = int(form.pwned.data)
|
|
|
|
|
|
|
|
if breaches > 0:
|
|
|
|
|
|
|
|
flask.flash(f"This password appears in {breaches} data breaches! Please change it.", "error")
|
|
|
|
|
|
|
|
return flask.render_template('user/edit.html', form=form, user=user,
|
|
|
|
return flask.render_template('user/edit.html', form=form, user=user,
|
|
|
|
domain=user.domain, max_quota_bytes=max_quota_bytes)
|
|
|
|
domain=user.domain, max_quota_bytes=max_quota_bytes)
|
|
|
|
form.populate_obj(user)
|
|
|
|
form.populate_obj(user)
|
|
|
@ -137,12 +127,8 @@ def user_password(user_email):
|
|
|
|
if form.pw.data != form.pw2.data:
|
|
|
|
if form.pw.data != form.pw2.data:
|
|
|
|
flask.flash('Passwords do not match', 'error')
|
|
|
|
flask.flash('Passwords do not match', 'error')
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
if len(form.pw.data) < 8:
|
|
|
|
if msg := utils.isBadOrPwned(form):
|
|
|
|
flask.flash("This password is too short.", "error")
|
|
|
|
flask.flash(msg, "error")
|
|
|
|
return flask.render_template('user/password.html', form=form, user=user)
|
|
|
|
|
|
|
|
breaches = int(form.pwned.data)
|
|
|
|
|
|
|
|
if breaches > 0:
|
|
|
|
|
|
|
|
flask.flash(f"This password appears in {breaches} data breaches! Please change it.", "error")
|
|
|
|
|
|
|
|
return flask.render_template('user/password.html', form=form, user=user)
|
|
|
|
return flask.render_template('user/password.html', form=form, user=user)
|
|
|
|
flask.session.regenerate()
|
|
|
|
flask.session.regenerate()
|
|
|
|
user.set_password(form.pw.data)
|
|
|
|
user.set_password(form.pw.data)
|
|
|
@ -195,12 +181,8 @@ def user_signup(domain_name=None):
|
|
|
|
if domain.has_email(form.localpart.data) or models.Alias.resolve(form.localpart.data, domain_name):
|
|
|
|
if domain.has_email(form.localpart.data) or models.Alias.resolve(form.localpart.data, domain_name):
|
|
|
|
flask.flash('Email is already used', 'error')
|
|
|
|
flask.flash('Email is already used', 'error')
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
if len(form.pw.data) < 8:
|
|
|
|
if msg := utils.isBadOrPwned(form):
|
|
|
|
flask.flash("This password is too short.", "error")
|
|
|
|
flask.flash(msg, "error")
|
|
|
|
return flask.render_template('user/signup.html', domain=domain, form=form)
|
|
|
|
|
|
|
|
breaches = int(form.pwned.data)
|
|
|
|
|
|
|
|
if breaches > 0:
|
|
|
|
|
|
|
|
flask.flash(f"This password appears in {breaches} data breaches! Please change it.", "error")
|
|
|
|
|
|
|
|
return flask.render_template('user/signup.html', domain=domain, form=form)
|
|
|
|
return flask.render_template('user/signup.html', domain=domain, form=form)
|
|
|
|
flask.session.regenerate()
|
|
|
|
flask.session.regenerate()
|
|
|
|
user = models.User(domain=domain)
|
|
|
|
user = models.User(domain=domain)
|
|
|
|