You've already forked Mailu
mirror of
https://github.com/Mailu/Mailu.git
synced 2025-11-06 08:49:13 +02:00
Merge remote-tracking branch 'upstream/master' into feat-psql-support
This commit is contained in:
@@ -267,10 +267,19 @@ class Email(object):
|
||||
|
||||
@classmethod
|
||||
def resolve_destination(cls, localpart, domain_name, ignore_forward_keep=False):
|
||||
localpart_stripped = None
|
||||
if os.environ.get('RECIPIENT_DELIMITER') in localpart:
|
||||
localpart_stripped = localpart.rsplit(os.environ.get('RECIPIENT_DELIMITER'), 1)[0]
|
||||
|
||||
alias = Alias.resolve(localpart, domain_name)
|
||||
if not alias and localpart_stripped:
|
||||
alias = Alias.resolve(localpart_stripped, domain_name)
|
||||
if alias:
|
||||
return alias.destination
|
||||
|
||||
user = User.query.get('{}@{}'.format(localpart, domain_name))
|
||||
if not user and localpart_stripped:
|
||||
user = User.query.get('{}@{}'.format(localpart_stripped, domain_name))
|
||||
if user:
|
||||
if user.forward_enabled:
|
||||
destination = user.forward_destination
|
||||
|
||||
@@ -84,7 +84,7 @@ class RelayForm(flask_wtf.FlaskForm):
|
||||
|
||||
class UserForm(flask_wtf.FlaskForm):
|
||||
localpart = fields.StringField(_('E-mail'), [validators.DataRequired(), validators.Regexp(LOCALPART_REGEX)])
|
||||
pw = fields.PasswordField(_('Password'), [validators.DataRequired()])
|
||||
pw = fields.PasswordField(_('Password'))
|
||||
pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')])
|
||||
quota_bytes = fields_.IntegerSliderField(_('Quota'), default=1000000000)
|
||||
enable_imap = fields.BooleanField(_('Allow IMAP access'), default=True)
|
||||
@@ -165,11 +165,11 @@ class FetchForm(flask_wtf.FlaskForm):
|
||||
protocol = fields.SelectField(_('Protocol'), choices=[
|
||||
('imap', 'IMAP'), ('pop3', 'POP3')
|
||||
])
|
||||
host = fields.StringField(_('Hostname or IP'))
|
||||
port = fields.IntegerField(_('TCP port'))
|
||||
host = fields.StringField(_('Hostname or IP'), [validators.DataRequired()])
|
||||
port = fields.IntegerField(_('TCP port'), [validators.DataRequired(), validators.NumberRange(min=0, max=65535)])
|
||||
tls = fields.BooleanField(_('Enable TLS'))
|
||||
username = fields.StringField(_('Username'))
|
||||
password = fields.StringField(_('Password'))
|
||||
username = fields.StringField(_('Username'), [validators.DataRequired()])
|
||||
password = fields.PasswordField(_('Password'))
|
||||
keep = fields.BooleanField(_('Keep emails on the server'))
|
||||
submit = fields.SubmitField(_('Submit'))
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ from mailu.ui import ui, forms, access
|
||||
|
||||
import flask
|
||||
import flask_login
|
||||
import wtforms
|
||||
|
||||
|
||||
@ui.route('/fetch/list', methods=['GET', 'POST'], defaults={'user_email': None})
|
||||
@@ -21,6 +22,7 @@ def fetch_create(user_email):
|
||||
user_email = user_email or flask_login.current_user.email
|
||||
user = models.User.query.get(user_email) or flask.abort(404)
|
||||
form = forms.FetchForm()
|
||||
form.pw.validators = [wtforms.validators.DataRequired()]
|
||||
if form.validate_on_submit():
|
||||
fetch = models.Fetch(user=user)
|
||||
form.populate_obj(fetch)
|
||||
@@ -38,6 +40,8 @@ def fetch_edit(fetch_id):
|
||||
fetch = models.Fetch.query.get(fetch_id) or flask.abort(404)
|
||||
form = forms.FetchForm(obj=fetch)
|
||||
if form.validate_on_submit():
|
||||
if not form.password.data:
|
||||
form.password.data = fetch.password
|
||||
form.populate_obj(fetch)
|
||||
models.db.session.commit()
|
||||
flask.flash('Fetch configuration updated')
|
||||
|
||||
@@ -23,6 +23,7 @@ def user_create(domain_name):
|
||||
return flask.redirect(
|
||||
flask.url_for('.user_list', domain_name=domain.name))
|
||||
form = forms.UserForm()
|
||||
form.pw.validators = [wtforms.validators.DataRequired()]
|
||||
if domain.max_quota_bytes:
|
||||
form.quota_bytes.validators = [
|
||||
wtforms.validators.NumberRange(max=domain.max_quota_bytes)]
|
||||
@@ -54,7 +55,6 @@ def user_edit(user_email):
|
||||
# Create the form
|
||||
form = forms.UserForm(obj=user)
|
||||
wtforms_components.read_only(form.localpart)
|
||||
form.pw.validators = []
|
||||
form.localpart.validators = []
|
||||
if max_quota_bytes:
|
||||
form.quota_bytes.validators = [
|
||||
|
||||
Reference in New Issue
Block a user