mirror of
https://github.com/Mailu/Mailu.git
synced 2025-02-09 13:23:54 +02:00
allow to disable aliases or users for domains and don't allow negativ values on domain creation/edit
This commit is contained in:
parent
4733f15c0c
commit
dda64fe91e
@ -91,7 +91,7 @@ def user(localpart, domain_name, password, hash_scheme=None):
|
|||||||
@click.option('-a', '--max_aliases')
|
@click.option('-a', '--max_aliases')
|
||||||
@click.option('-q', '--max_quota_bytes')
|
@click.option('-q', '--max_quota_bytes')
|
||||||
@flask_cli.with_appcontext
|
@flask_cli.with_appcontext
|
||||||
def domain(domain_name, max_users=0, max_aliases=0, max_quota_bytes=0):
|
def domain(domain_name, max_users=-1, max_aliases=-1, max_quota_bytes=0):
|
||||||
domain = models.Domain.query.get(domain_name)
|
domain = models.Domain.query.get(domain_name)
|
||||||
if not domain:
|
if not domain:
|
||||||
domain = models.Domain(name=domain_name)
|
domain = models.Domain(name=domain_name)
|
||||||
@ -140,8 +140,8 @@ def config_update(verbose=False, delete_objects=False):
|
|||||||
if verbose:
|
if verbose:
|
||||||
print(str(domain_config))
|
print(str(domain_config))
|
||||||
domain_name = domain_config['name']
|
domain_name = domain_config['name']
|
||||||
max_users = domain_config.get('max_users', 0)
|
max_users = domain_config.get('max_users', -1)
|
||||||
max_aliases = domain_config.get('max_aliases', 0)
|
max_aliases = domain_config.get('max_aliases', -1)
|
||||||
max_quota_bytes = domain_config.get('max_quota_bytes', 0)
|
max_quota_bytes = domain_config.get('max_quota_bytes', 0)
|
||||||
tracked_domains.add(domain_name)
|
tracked_domains.add(domain_name)
|
||||||
domain = models.Domain.query.get(domain_name)
|
domain = models.Domain.query.get(domain_name)
|
||||||
|
@ -122,8 +122,8 @@ class Domain(Base):
|
|||||||
name = db.Column(IdnaDomain, primary_key=True, nullable=False)
|
name = db.Column(IdnaDomain, primary_key=True, nullable=False)
|
||||||
managers = db.relationship('User', secondary=managers,
|
managers = db.relationship('User', secondary=managers,
|
||||||
backref=db.backref('manager_of'), lazy='dynamic')
|
backref=db.backref('manager_of'), lazy='dynamic')
|
||||||
max_users = db.Column(db.Integer, nullable=False, default=0)
|
max_users = db.Column(db.Integer, nullable=False, default=-1)
|
||||||
max_aliases = db.Column(db.Integer, nullable=False, default=0)
|
max_aliases = db.Column(db.Integer, nullable=False, default=-1)
|
||||||
max_quota_bytes = db.Column(db.Integer(), nullable=False, default=0)
|
max_quota_bytes = db.Column(db.Integer(), nullable=False, default=0)
|
||||||
signup_enabled = db.Column(db.Boolean(), nullable=False, default=False)
|
signup_enabled = db.Column(db.Boolean(), nullable=False, default=False)
|
||||||
|
|
||||||
|
@ -53,8 +53,8 @@ class LoginForm(flask_wtf.FlaskForm):
|
|||||||
|
|
||||||
class DomainForm(flask_wtf.FlaskForm):
|
class DomainForm(flask_wtf.FlaskForm):
|
||||||
name = fields.StringField(_('Domain name'), [validators.DataRequired()])
|
name = fields.StringField(_('Domain name'), [validators.DataRequired()])
|
||||||
max_users = fields_.IntegerField(_('Maximum user count'), default=10)
|
max_users = fields_.IntegerField(_('Maximum user count'), [validators.NumberRange(min=-1)], default=10)
|
||||||
max_aliases = fields_.IntegerField(_('Maximum alias count'), default=10)
|
max_aliases = fields_.IntegerField(_('Maximum alias count'), [validators.NumberRange(min=-1)], default=10)
|
||||||
max_quota_bytes = fields_.IntegerSliderField(_('Maximum user quota'), default=0)
|
max_quota_bytes = fields_.IntegerSliderField(_('Maximum user quota'), default=0)
|
||||||
signup_enabled = fields.BooleanField(_('Enable sign-up'), default=False)
|
signup_enabled = fields.BooleanField(_('Enable sign-up'), default=False)
|
||||||
comment = fields.StringField(_('Comment'))
|
comment = fields.StringField(_('Comment'))
|
||||||
|
@ -40,8 +40,8 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>{{ domain.name }}</td>
|
<td>{{ domain.name }}</td>
|
||||||
<td>{{ domain.users | count }} / {{ domain.max_users or '∞' }}</td>
|
<td>{{ domain.users | count }} / {{ '∞' if domain.max_users == -1 else domain.max_users }}</td>
|
||||||
<td>{{ domain.aliases | count }} / {{ domain.max_aliases or '∞' }}</td>
|
<td>{{ domain.aliases | count }} / {{ '∞' if domain.max_aliases == -1 else domain.max_aliases }}</td>
|
||||||
<td>{{ domain.comment or '' }}</td>
|
<td>{{ domain.comment or '' }}</td>
|
||||||
<td>{{ domain.created_at }}</td>
|
<td>{{ domain.created_at }}</td>
|
||||||
<td>{{ domain.updated_at or '' }}</td>
|
<td>{{ domain.updated_at or '' }}</td>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
{% for domain_name, domain in available_domains.items() %}
|
{% for domain_name, domain in available_domains.items() %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="{{ url_for('.user_signup', domain_name=domain_name) }}">{{ domain_name }}</a></td>
|
<td><a href="{{ url_for('.user_signup', domain_name=domain_name) }}">{{ domain_name }}</a></td>
|
||||||
<td>{{ domain.max_users - (domain.users | count) if domain.max_users else '∞' }}</td>
|
<td>{{ '∞' if domain.max_users == -1 else domain.max_users - (domain.users | count)}}</td>
|
||||||
<td>{{ domain.max_quota_bytes or config['DEFAULT_QUOTA'] | filesizeformat }}</td>
|
<td>{{ domain.max_quota_bytes or config['DEFAULT_QUOTA'] | filesizeformat }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -16,7 +16,7 @@ def alias_list(domain_name):
|
|||||||
@access.domain_admin(models.Domain, 'domain_name')
|
@access.domain_admin(models.Domain, 'domain_name')
|
||||||
def alias_create(domain_name):
|
def alias_create(domain_name):
|
||||||
domain = models.Domain.query.get(domain_name) or flask.abort(404)
|
domain = models.Domain.query.get(domain_name) or flask.abort(404)
|
||||||
if domain.max_aliases and len(domain.aliases) >= domain.max_aliases:
|
if not domain.max_aliases == -1 and len(domain.aliases) >= domain.max_aliases:
|
||||||
flask.flash('Too many aliases for domain %s' % domain, 'error')
|
flask.flash('Too many aliases for domain %s' % domain, 'error')
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
flask.url_for('.alias_list', domain_name=domain.name))
|
flask.url_for('.alias_list', domain_name=domain.name))
|
||||||
|
@ -18,7 +18,7 @@ def user_list(domain_name):
|
|||||||
@access.domain_admin(models.Domain, 'domain_name')
|
@access.domain_admin(models.Domain, 'domain_name')
|
||||||
def user_create(domain_name):
|
def user_create(domain_name):
|
||||||
domain = models.Domain.query.get(domain_name) or flask.abort(404)
|
domain = models.Domain.query.get(domain_name) or flask.abort(404)
|
||||||
if domain.max_users and len(domain.users) >= domain.max_users:
|
if not domain.max_users == -1 and len(domain.users) >= domain.max_users:
|
||||||
flask.flash('Too many users for domain %s' % domain, 'error')
|
flask.flash('Too many users for domain %s' % domain, 'error')
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
flask.url_for('.user_list', domain_name=domain.name))
|
flask.url_for('.user_list', domain_name=domain.name))
|
||||||
@ -168,7 +168,7 @@ def user_signup(domain_name=None):
|
|||||||
available_domains = {
|
available_domains = {
|
||||||
domain.name: domain
|
domain.name: domain
|
||||||
for domain in models.Domain.query.filter_by(signup_enabled=True).all()
|
for domain in models.Domain.query.filter_by(signup_enabled=True).all()
|
||||||
if not domain.max_users or len(domain.users) < domain.max_users
|
if domain.max_users == -1 or len(domain.users) < domain.max_users
|
||||||
}
|
}
|
||||||
if not available_domains:
|
if not available_domains:
|
||||||
flask.flash('No domain available for registration')
|
flask.flash('No domain available for registration')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user