mirror of
				https://github.com/optim-enterprises-bv/Mailu.git
				synced 2025-10-31 01:57:59 +00:00 
			
		
		
		
	allow to disable aliases or users for domains and don't allow negativ values on domain creation/edit
This commit is contained in:
		| @@ -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') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 hoellen
					hoellen