mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-12-20 23:41:20 +00:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from flask_security import admin_change_password
|
|
from sqlalchemy import select
|
|
|
|
from ... import app, db
|
|
from ...model_independent_funs import randomPassword
|
|
from ...models import Admin, User
|
|
from ..terminal_utils import box, validating_input
|
|
|
|
|
|
def main():
|
|
print("This script will generate a new random password for a chosen admin.")
|
|
print()
|
|
|
|
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:
|
|
print("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 += "Enter number"
|
|
|
|
admin_index = validating_input(
|
|
prompt,
|
|
options=[str(ind) for ind in range(num_admins)],
|
|
format_function=lambda ans: int(ans),
|
|
)
|
|
|
|
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
|
|
|
|
box(new_password, "New password")
|
|
|
|
print("Done!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|