display error (not exception) when creating admin

repleace misleading python exception (mailu broken)
with error message stating that the admin user is
already present
master
Alexander Graf
parent d464187477
commit b63081cb48

@ -48,44 +48,45 @@ 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') @click.option('-m', '--mode', default='create')
@with_appcontext @with_appcontext
def admin(localpart, domain_name, password, mode='create'): def admin(localpart, domain_name, password, mode):
""" Create an admin user """ Create an admin user
'mode' can be: 'mode' can be:
- 'create' (default) Will try to create user and will raise an exception if present - 'create': (default) create user. it's an error if user already exists
- 'ifmissing': if user exists, nothing happens, else it will be created - 'ifmissing': if user exists, nothing happens, else it will be created
- 'update': user is created or, if it exists, its password gets updated - 'update': user is created or, if it exists, its password gets updated
""" """
if not mode in ('create', 'update', 'ifmissing'):
raise click.ClickException(f'invalid mode: {mode!r}')
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 = None email = f'{localpart}@{domain_name}'
if mode == 'ifmissing' or mode == 'update': if user := models.User.query.get(email):
email = f'{localpart}@{domain_name}' if mode == 'ifmissing':
user = models.User.query.get(email) print(f'user {email!r} exists, not updating')
if user and mode == 'ifmissing':
print('user %s exists, not updating' % email)
return return
elif mode == 'update':
if not user: user.set_password(password)
db.session.commit()
print("updated admin password")
else:
raise click.ClickException(f'user {email!r} exists, not created')
else:
user = models.User( user = models.User(
localpart=localpart, localpart=localpart,
domain=domain, domain=domain,
global_admin=True global_admin=True
) )
user.set_password(password)
db.session.add(user) db.session.add(user)
user.set_password(password)
db.session.commit() db.session.commit()
print("created admin user") print("created admin user")
elif mode == 'update':
user.set_password(password)
db.session.commit()
print("updated admin password")
@mailu.command() @mailu.command()

Loading…
Cancel
Save