mirror of
				https://github.com/optim-enterprises-bv/Mailu.git
				synced 2025-10-30 17:47:55 +00:00 
			
		
		
		
	Use click for the manager command
This commit is contained in:
		| @@ -1,18 +1,25 @@ | |||||||
| from mailu import models | from mailu import models, create_app | ||||||
|  |  | ||||||
| from flask import current_app as app | from flask import current_app as app | ||||||
|  | from flask import cli as flask_cli | ||||||
|  |  | ||||||
| import flask | import flask | ||||||
| import os | import os | ||||||
| import socket | import socket | ||||||
| import uuid | import uuid | ||||||
|  | import click | ||||||
|  |  | ||||||
|  |  | ||||||
| manager = flask_script.Manager() |  | ||||||
| db = models.db | db = models.db | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @click.group() | ||||||
|  | def cli(cls=flask_cli.FlaskGroup, create_app=mailu.create_app): | ||||||
|  |     """ Main command group | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @cli.command() | ||||||
| def advertise(): | def advertise(): | ||||||
|     """ Advertise this server against statistic services. |     """ Advertise this server against statistic services. | ||||||
|     """ |     """ | ||||||
| @@ -30,7 +37,10 @@ def advertise(): | |||||||
|             pass |             pass | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @cli.command() | ||||||
|  | @cli.argument('localpart', help='localpart for the new admin') | ||||||
|  | @cli.argument('domain_name', help='domain name for the new admin') | ||||||
|  | @cli.argument('password', help='plain password for the new admin') | ||||||
| def admin(localpart, domain_name, password): | def admin(localpart, domain_name, password): | ||||||
|     """ Create an admin user |     """ Create an admin user | ||||||
|     """ |     """ | ||||||
| @@ -48,7 +58,11 @@ def admin(localpart, domain_name, password): | |||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @cli.command() | ||||||
|  | @cli.argument('localpart', help='localpart for the new user') | ||||||
|  | @cli.argument('domain_name', help='domain name for the new user') | ||||||
|  | @cli.argument('password', help='plain password for the new user') | ||||||
|  | @cli.argument('hash_scheme', help='password hashing scheme') | ||||||
| def user(localpart, domain_name, password, | def user(localpart, domain_name, password, | ||||||
|          hash_scheme=app.config['PASSWORD_SCHEME']): |          hash_scheme=app.config['PASSWORD_SCHEME']): | ||||||
|     """ Create a user |     """ Create a user | ||||||
| @@ -67,10 +81,11 @@ def user(localpart, domain_name, password, | |||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.option('-n', '--domain_name', dest='domain_name') | @cli.command() | ||||||
| @manager.option('-u', '--max_users', dest='max_users') | @cli.option('-n', '--domain_name', dest='domain_name') | ||||||
| @manager.option('-a', '--max_aliases', dest='max_aliases') | @cli.option('-u', '--max_users', dest='max_users') | ||||||
| @manager.option('-q', '--max_quota_bytes', dest='max_quota_bytes') | @cli.option('-a', '--max_aliases', dest='max_aliases') | ||||||
|  | @cli.option('-q', '--max_quota_bytes', dest='max_quota_bytes') | ||||||
| def domain(domain_name, max_users=0, max_aliases=0, max_quota_bytes=0): | def domain(domain_name, max_users=0, max_aliases=0, max_quota_bytes=0): | ||||||
|     domain = models.Domain.query.get(domain_name) |     domain = models.Domain.query.get(domain_name) | ||||||
|     if not domain: |     if not domain: | ||||||
| @@ -79,14 +94,14 @@ def domain(domain_name, max_users=0, max_aliases=0, max_quota_bytes=0): | |||||||
|         db.session.commit() |         db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @cli.command() | ||||||
|  | @cli.argument('localpart', help='localpart for the new user') | ||||||
|  | @cli.argument('domain_name', help='domain name for the new user') | ||||||
|  | @cli.argument('password_hash', help='password hash for the new user') | ||||||
|  | @cli.argument('hash_scheme', help='password hashing scheme') | ||||||
| def user_import(localpart, domain_name, password_hash, | def user_import(localpart, domain_name, password_hash, | ||||||
|                 hash_scheme=app.config['PASSWORD_SCHEME']): |                 hash_scheme=app.config['PASSWORD_SCHEME']): | ||||||
|     """ Import a user along with password hash. Available hashes: |     """ Import a user along with password hash. | ||||||
|                    'SHA512-CRYPT' |  | ||||||
|                    'SHA256-CRYPT' |  | ||||||
|                    'MD5-CRYPT' |  | ||||||
|                    'CRYPT' |  | ||||||
|     """ |     """ | ||||||
|     domain = models.Domain.query.get(domain_name) |     domain = models.Domain.query.get(domain_name) | ||||||
|     if not domain: |     if not domain: | ||||||
| @@ -102,7 +117,9 @@ def user_import(localpart, domain_name, password_hash, | |||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @cli.command() | ||||||
|  | @cli.option('-v', dest='verbose') | ||||||
|  | @cli.option('-d', dest='delete_objects') | ||||||
| def config_update(verbose=False, delete_objects=False): | def config_update(verbose=False, delete_objects=False): | ||||||
|     """sync configuration with data from YAML-formatted stdin""" |     """sync configuration with data from YAML-formatted stdin""" | ||||||
|     import yaml |     import yaml | ||||||
| @@ -241,7 +258,8 @@ def config_update(verbose=False, delete_objects=False): | |||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @cli.command() | ||||||
|  | @cli.argument('email', help='email address to be deleted') | ||||||
| def user_delete(email): | def user_delete(email): | ||||||
|     """delete user""" |     """delete user""" | ||||||
|     user = models.User.query.get(email) |     user = models.User.query.get(email) | ||||||
| @@ -250,7 +268,8 @@ def user_delete(email): | |||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @cli.command() | ||||||
|  | @cli.argument('email', help='email alias to be deleted') | ||||||
| def alias_delete(email): | def alias_delete(email): | ||||||
|     """delete alias""" |     """delete alias""" | ||||||
|     alias = models.Alias.query.get(email) |     alias = models.Alias.query.get(email) | ||||||
| @@ -259,7 +278,10 @@ def alias_delete(email): | |||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| @manager.command | @cli.command() | ||||||
|  | @cli.argument('localpart', help='localpart for the new alias') | ||||||
|  | @cli.argument('domain_name', help='domain name for the new alias') | ||||||
|  | @cli.argument('destination', help='destination for the new alias') | ||||||
| def alias(localpart, domain_name, destination): | def alias(localpart, domain_name, destination): | ||||||
|     """ Create an alias |     """ Create an alias | ||||||
|     """ |     """ | ||||||
| @@ -276,30 +298,32 @@ def alias(localpart, domain_name, destination): | |||||||
|     db.session.add(alias) |     db.session.add(alias) | ||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
| # Set limits to a domain |  | ||||||
|  |  | ||||||
|  | @cli.command() | ||||||
| @manager.command | @cli.argument('domain_name', help='domain to be updated') | ||||||
|  | @cli.argument('max_users', help='maximum user count') | ||||||
|  | @cli.argument('max_aliases', help='maximum alias count') | ||||||
|  | @cli.argument('max_quota_bytes', help='maximum quota bytes par user') | ||||||
| def setlimits(domain_name, max_users, max_aliases, max_quota_bytes): | def setlimits(domain_name, max_users, max_aliases, max_quota_bytes): | ||||||
|  |     """ Set domain limits | ||||||
|  |     """ | ||||||
|     domain = models.Domain.query.get(domain_name) |     domain = models.Domain.query.get(domain_name) | ||||||
|     domain.max_users = max_users |     domain.max_users = max_users | ||||||
|     domain.max_aliases = max_aliases |     domain.max_aliases = max_aliases | ||||||
|     domain.max_quota_bytes = max_quota_bytes |     domain.max_quota_bytes = max_quota_bytes | ||||||
|  |  | ||||||
|     db.session.add(domain) |     db.session.add(domain) | ||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
| # Make the user manager of a domain |  | ||||||
|  |  | ||||||
|  | @cli.command() | ||||||
| @manager.command | @cli.argument('domain_name', help='target domain name') | ||||||
|  | @cli.argument('user_name', help='username inside the target domain') | ||||||
| def setmanager(domain_name, user_name='manager'): | def setmanager(domain_name, user_name='manager'): | ||||||
|  |     """ Make a user manager of a domain | ||||||
|  |     """ | ||||||
|     domain = models.Domain.query.get(domain_name) |     domain = models.Domain.query.get(domain_name) | ||||||
|     manageruser = models.User.query.get(user_name + '@' + domain_name) |     manageruser = models.User.query.get(user_name + '@' + domain_name) | ||||||
|     domain.managers.append(manageruser) |     domain.managers.append(manageruser) | ||||||
|     db.session.add(domain) |     db.session.add(domain) | ||||||
|     db.session.commit() |     db.session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": |  | ||||||
|     manager.run() |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 kaiyou
					kaiyou