""" Passwort eines bestehenden Kontos zuruecksetzen (Gegenstueck zu create_user.py). Beispiel: KUNDENPLATTFORM_DATABASE_URL=... .venv/bin/python scripts/reset_password.py \\ --email admin@schule-beispiel.de """ import argparse import asyncio import getpass import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from fastapi_users import exceptions # noqa: E402 from auth import UserDatabase, UserManager # noqa: E402 from db import get_async_database_connection # noqa: E402 async def passwort_zuruecksetzen(email: str, password: str): async with await get_async_database_connection() as connection: user_manager = UserManager(UserDatabase(connection)) user = await user_manager.get_by_email(email) await user_manager.validate_password(password, user) await user_manager.user_db.update(user, {"hashed_password": user_manager.password_helper.hash(password)}) def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--email", required=True) args = parser.parse_args() if not os.environ.get("KUNDENPLATTFORM_DATABASE_URL"): sys.exit("KUNDENPLATTFORM_DATABASE_URL ist nicht gesetzt.") password = getpass.getpass("Neues Passwort: ") password_confirm = getpass.getpass("Neues Passwort (Wiederholung): ") if password != password_confirm: sys.exit("Passwörter stimmen nicht überein.") try: asyncio.run(passwort_zuruecksetzen(args.email, password)) except exceptions.UserNotExists: sys.exit(f"Kein Konto mit der E-Mail {args.email} gefunden.") except exceptions.InvalidPasswordException as fehler: sys.exit(f"Passwort abgelehnt: {fehler.reason}") print(f"Passwort für {args.email} zurückgesetzt.") if __name__ == "__main__": main()