diff --git a/core/admin/mailu/manage.py b/core/admin/mailu/manage.py index 7f32f6c8..4846c2d6 100644 --- a/core/admin/mailu/manage.py +++ b/core/admin/mailu/manage.py @@ -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) diff --git a/core/admin/mailu/models.py b/core/admin/mailu/models.py index 30a2ed64..3588b4ae 100644 --- a/core/admin/mailu/models.py +++ b/core/admin/mailu/models.py @@ -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) diff --git a/core/admin/mailu/ui/forms.py b/core/admin/mailu/ui/forms.py index 5ee6da7d..04597872 100644 --- a/core/admin/mailu/ui/forms.py +++ b/core/admin/mailu/ui/forms.py @@ -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')) diff --git a/core/admin/mailu/ui/templates/domain/list.html b/core/admin/mailu/ui/templates/domain/list.html index 0fa54f4f..2431faa5 100644 --- a/core/admin/mailu/ui/templates/domain/list.html +++ b/core/admin/mailu/ui/templates/domain/list.html @@ -40,8 +40,8 @@ {% endif %} {{ domain.name }} - {{ domain.users | count }} / {{ domain.max_users or '∞' }} - {{ domain.aliases | count }} / {{ domain.max_aliases or '∞' }} + {{ domain.users | count }} / {{ '∞' if domain.max_users == -1 else domain.max_users }} + {{ domain.aliases | count }} / {{ '∞' if domain.max_aliases == -1 else domain.max_aliases }} {{ domain.comment or '' }} {{ domain.created_at }} {{ domain.updated_at or '' }} diff --git a/core/admin/mailu/ui/templates/user/signup_domain.html b/core/admin/mailu/ui/templates/user/signup_domain.html index 84f33b3d..1cb65ae8 100644 --- a/core/admin/mailu/ui/templates/user/signup_domain.html +++ b/core/admin/mailu/ui/templates/user/signup_domain.html @@ -18,7 +18,7 @@ {% for domain_name, domain in available_domains.items() %} {{ domain_name }} - {{ domain.max_users - (domain.users | count) if domain.max_users else '∞' }} + {{ '∞' if domain.max_users == -1 else domain.max_users - (domain.users | count)}} {{ domain.max_quota_bytes or config['DEFAULT_QUOTA'] | filesizeformat }} {% endfor %} diff --git a/core/admin/mailu/ui/views/aliases.py b/core/admin/mailu/ui/views/aliases.py index 5e65c86d..bd3da3dc 100644 --- a/core/admin/mailu/ui/views/aliases.py +++ b/core/admin/mailu/ui/views/aliases.py @@ -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)) diff --git a/core/admin/mailu/ui/views/users.py b/core/admin/mailu/ui/views/users.py index e3c03848..42eb6c05 100644 --- a/core/admin/mailu/ui/views/users.py +++ b/core/admin/mailu/ui/views/users.py @@ -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')