mirror of
https://github.com/Mailu/Mailu.git
synced 2025-01-28 03:56:43 +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('-q', '--max_quota_bytes')
|
||||
@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)
|
||||
if not domain:
|
||||
domain = models.Domain(name=domain_name)
|
||||
@ -140,8 +140,8 @@ def config_update(verbose=False, delete_objects=False):
|
||||
if verbose:
|
||||
print(str(domain_config))
|
||||
domain_name = domain_config['name']
|
||||
max_users = domain_config.get('max_users', 0)
|
||||
max_aliases = domain_config.get('max_aliases', 0)
|
||||
max_users = domain_config.get('max_users', -1)
|
||||
max_aliases = domain_config.get('max_aliases', -1)
|
||||
max_quota_bytes = domain_config.get('max_quota_bytes', 0)
|
||||
tracked_domains.add(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)
|
||||
managers = db.relationship('User', secondary=managers,
|
||||
backref=db.backref('manager_of'), lazy='dynamic')
|
||||
max_users = db.Column(db.Integer, nullable=False, default=0)
|
||||
max_aliases = 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=-1)
|
||||
max_quota_bytes = db.Column(db.Integer(), nullable=False, default=0)
|
||||
signup_enabled = db.Column(db.Boolean(), nullable=False, default=False)
|
||||
|
||||
|
@ -53,8 +53,8 @@ class LoginForm(flask_wtf.FlaskForm):
|
||||
|
||||
class DomainForm(flask_wtf.FlaskForm):
|
||||
name = fields.StringField(_('Domain name'), [validators.DataRequired()])
|
||||
max_users = fields_.IntegerField(_('Maximum user count'), default=10)
|
||||
max_aliases = fields_.IntegerField(_('Maximum alias count'), default=10)
|
||||
max_users = fields_.IntegerField(_('Maximum user count'), [validators.NumberRange(min=-1)], 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)
|
||||
signup_enabled = fields.BooleanField(_('Enable sign-up'), default=False)
|
||||
comment = fields.StringField(_('Comment'))
|
||||
|
@ -40,8 +40,8 @@
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ domain.name }}</td>
|
||||
<td>{{ domain.users | count }} / {{ domain.max_users or '∞' }}</td>
|
||||
<td>{{ domain.aliases | count }} / {{ domain.max_aliases or '∞' }}</td>
|
||||
<td>{{ domain.users | count }} / {{ '∞' if domain.max_users == -1 else domain.max_users }}</td>
|
||||
<td>{{ domain.aliases | count }} / {{ '∞' if domain.max_aliases == -1 else domain.max_aliases }}</td>
|
||||
<td>{{ domain.comment or '' }}</td>
|
||||
<td>{{ domain.created_at }}</td>
|
||||
<td>{{ domain.updated_at or '' }}</td>
|
||||
|
@ -18,7 +18,7 @@
|
||||
{% for domain_name, domain in available_domains.items() %}
|
||||
<tr>
|
||||
<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>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
@ -16,7 +16,7 @@ def alias_list(domain_name):
|
||||
@access.domain_admin(models.Domain, 'domain_name')
|
||||
def alias_create(domain_name):
|
||||
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')
|
||||
return flask.redirect(
|
||||
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')
|
||||
def user_create(domain_name):
|
||||
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')
|
||||
return flask.redirect(
|
||||
flask.url_for('.user_list', domain_name=domain.name))
|
||||
@ -168,7 +168,7 @@ def user_signup(domain_name=None):
|
||||
available_domains = {
|
||||
domain.name: domain
|
||||
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:
|
||||
flask.flash('No domain available for registration')
|
||||
|
Loading…
x
Reference in New Issue
Block a user