You've already forked Mailu
mirror of
https://github.com/Mailu/Mailu.git
synced 2025-11-27 22:18:22 +02:00
Allow to automatically create admin account during startup.
This commit is contained in:
@@ -42,22 +42,44 @@ def advertise():
|
|||||||
@click.argument('localpart')
|
@click.argument('localpart')
|
||||||
@click.argument('domain_name')
|
@click.argument('domain_name')
|
||||||
@click.argument('password')
|
@click.argument('password')
|
||||||
|
@click.option('-m', '--mode')
|
||||||
@flask_cli.with_appcontext
|
@flask_cli.with_appcontext
|
||||||
def admin(localpart, domain_name, password):
|
def admin(localpart, domain_name, password, mode = 'create'):
|
||||||
""" Create an admin user
|
""" Create an admin user
|
||||||
|
'mode' can be:
|
||||||
|
- 'create' (default) Will try to create user and will raise an exception if present
|
||||||
|
- 'ifmissing': if user exists, nothing happens, else it will be created
|
||||||
|
- 'update': user is created or, if it exists, its password gets updated
|
||||||
"""
|
"""
|
||||||
domain = models.Domain.query.get(domain_name)
|
domain = models.Domain.query.get(domain_name)
|
||||||
if not domain:
|
if not domain:
|
||||||
domain = models.Domain(name=domain_name)
|
domain = models.Domain(name=domain_name)
|
||||||
db.session.add(domain)
|
db.session.add(domain)
|
||||||
user = models.User(
|
|
||||||
localpart=localpart,
|
user = None
|
||||||
domain=domain,
|
if mode == 'ifmissing' or mode == 'update':
|
||||||
global_admin=True
|
email = '{}@{}'.format(localpart, domain_name)
|
||||||
)
|
user = models.User.query.get(email)
|
||||||
user.set_password(password)
|
|
||||||
db.session.add(user)
|
if user and mode == 'ifmissing':
|
||||||
db.session.commit()
|
print('user %s exists, not updating' % email)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not user:
|
||||||
|
user = models.User(
|
||||||
|
localpart=localpart,
|
||||||
|
domain=domain,
|
||||||
|
global_admin=True
|
||||||
|
)
|
||||||
|
user.set_password(password)
|
||||||
|
db.session.add(user)
|
||||||
|
db.session.commit()
|
||||||
|
print("created admin user")
|
||||||
|
elif mode == 'update':
|
||||||
|
user.set_password(password)
|
||||||
|
db.session.commit()
|
||||||
|
print("updated admin password")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@mailu.command()
|
@mailu.command()
|
||||||
|
|||||||
@@ -4,4 +4,12 @@ import os
|
|||||||
|
|
||||||
os.system("flask mailu advertise")
|
os.system("flask mailu advertise")
|
||||||
os.system("flask db upgrade")
|
os.system("flask db upgrade")
|
||||||
|
|
||||||
|
if 'INITIAL_ADMIN_ACCOUNT' in os.environ and 'INITIAL_ADMIN_DOMAIN' in os.environ and 'INITIAL_ADMIN_PW' in os.environ:
|
||||||
|
mode = 'ifmissing'
|
||||||
|
if 'INITIAL_ADMIN_MODE' in os.environ:
|
||||||
|
mode = os.environ['INITIAL_ADMIN_MODE']
|
||||||
|
os.system("flask mailu admin %s %s '%s' --mode %s" % (
|
||||||
|
os.environ['INITIAL_ADMIN_ACCOUNT'], os.environ['INITIAL_ADMIN_DOMAIN'], os.environ['INITIAL_ADMIN_PW'], mode))
|
||||||
|
|
||||||
os.system("gunicorn -w 4 -b :80 --access-logfile - --error-logfile - --preload 'mailu:create_app()'")
|
os.system("gunicorn -w 4 -b :80 --access-logfile - --error-logfile - --preload 'mailu:create_app()'")
|
||||||
|
|||||||
Reference in New Issue
Block a user