""" Manuelle Konto-Anlage für die Kundenplattform (kein Self-Service in v1, siehe ADR-0011). Beispiel: KUNDENPLATTFORM_DATABASE_URL=... .venv/bin/python scripts/create_user.py \\ --organization-id 11111111-1111-4111-8111-111111111111 \\ --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 auth import UserCreate, UserDatabase, UserManager # noqa: E402 from db import get_async_database_connection # noqa: E402 async def konto_anlegen(organization_id: str, email: str, password: str, admin: bool): async with await get_async_database_connection() as connection: user_manager = UserManager(UserDatabase(connection)) await user_manager.create( UserCreate( email=email, password=password, organization_id=organization_id, is_superuser=admin, ) ) def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--organization-id", required=True) parser.add_argument("--email", required=True) parser.add_argument( "--admin", action="store_true", help="Konto bekommt organisationsübergreifenden Admin-Zugriff (/admin/...).", ) args = parser.parse_args() if not os.environ.get("KUNDENPLATTFORM_DATABASE_URL"): sys.exit("KUNDENPLATTFORM_DATABASE_URL ist nicht gesetzt.") password = getpass.getpass("Passwort: ") password_confirm = getpass.getpass("Passwort (Wiederholung): ") if password != password_confirm: sys.exit("Passwörter stimmen nicht überein.") asyncio.run(konto_anlegen(args.organization_id, args.email, password, args.admin)) print(f"Konto für {args.email} angelegt{' (Admin)' if args.admin else ''}.") if __name__ == "__main__": main()