You've already forked Mailu
mirror of
https://github.com/Mailu/Mailu.git
synced 2025-11-27 22:18:22 +02: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