Allow to automatically create admin account during startup.

master
cristi 6 years ago
parent d301de7d83
commit a071181c61

@ -42,14 +42,30 @@ def advertise():
@click.argument('localpart')
@click.argument('domain_name')
@click.argument('password')
@click.option('-m', '--mode')
@flask_cli.with_appcontext
def admin(localpart, domain_name, password):
def admin(localpart, domain_name, password, mode = 'create'):
""" 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)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
user = None
if mode == 'ifmissing' or mode == 'update':
email = '{}@{}'.format(localpart, domain_name)
user = models.User.query.get(email)
if user and mode == 'ifmissing':
print('user %s exists, not updating' % email)
return
if not user:
user = models.User(
localpart=localpart,
domain=domain,
@ -58,6 +74,12 @@ def admin(localpart, domain_name, password):
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()

@ -4,4 +4,12 @@ import os
os.system("flask mailu advertise")
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()'")

Loading…
Cancel
Save