mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-09-19 18:31:16 +00:00
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
|
import click
|
||
|
from flask_security import admin_change_password
|
||
|
from sqlalchemy import select
|
||
|
|
||
|
from advlabdb import create_app
|
||
|
from advlabdb.model_independent_funs import randomPassword
|
||
|
from advlabdb.models import Admin, User, db
|
||
|
|
||
|
|
||
|
def _reset_admin_password(manage):
|
||
|
click.echo("This script will generate a new random password for a chosen admin.\n")
|
||
|
|
||
|
app = create_app(create_for_server=False)
|
||
|
|
||
|
with app.app_context():
|
||
|
with db.session.begin():
|
||
|
admins = db.session.execute(select(Admin).join(User).where(User.active == True)).scalars().all()
|
||
|
activate_user = False
|
||
|
|
||
|
if len(admins) == 0:
|
||
|
click.echo("There is no admin with an active user. The user of the chosen admin will be activated.")
|
||
|
admins = db.session.execute(select(Admin)).scalars().all()
|
||
|
activate_user = True
|
||
|
|
||
|
num_admins = len(admins)
|
||
|
|
||
|
prompt = "Admins:\n"
|
||
|
for ind, admin in enumerate(admins):
|
||
|
user = admin.user
|
||
|
prompt += f"[{ind}] {user.first_name} {user.last_name}: {user.email}\n"
|
||
|
prompt += f"Enter number [0-{num_admins - 1}]"
|
||
|
|
||
|
admin_index = click.prompt(
|
||
|
prompt,
|
||
|
type=click.IntRange(0, num_admins - 1),
|
||
|
)
|
||
|
|
||
|
chosen_admin_user = admins[admin_index].user
|
||
|
|
||
|
new_password = randomPassword()
|
||
|
|
||
|
admin_change_password(
|
||
|
chosen_admin_user, new_password, notify=False
|
||
|
) # Password is automatically hashed with this function
|
||
|
|
||
|
if activate_user:
|
||
|
chosen_admin_user.active = True
|
||
|
|
||
|
manage.box(f"New password: {new_password}")
|
||
|
|
||
|
click.echo(click.style("Done!", fg="green"))
|