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 3 years ago
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
if mode == 'ifmissing' or mode == 'update':
email = f'{localpart}@{domain_name}' email = f'{localpart}@{domain_name}'
user = models.User.query.get(email) if user := models.User.query.get(email):
if mode == 'ifmissing':
if user and mode == 'ifmissing': print(f'user {email!r} exists, not updating')
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