45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
"""Create the demo admin login the platform injects at deploy.
|
|
|
|
The platform generates DEMO_EMAIL / DEMO_PASSWORD, sets them in the environment
|
|
and runs this script. We create an admin account with that username/password so
|
|
the deployed app can be opened. Idempotent: re-running only updates the password.
|
|
|
|
The public admin login is username-based, so DEMO_EMAIL is used as the username.
|
|
The built-in ``DEVTeacher`` account still exists for the teacher.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
from app.db import Base, SessionLocal, engine
|
|
from app.models import AdminUser
|
|
from app.security import hash_password
|
|
|
|
|
|
def main() -> None:
|
|
email = os.environ.get("DEMO_EMAIL")
|
|
password = os.environ.get("DEMO_PASSWORD")
|
|
if not email or not password:
|
|
print("[seed_demo] DEMO_EMAIL / DEMO_PASSWORD not set; skipping")
|
|
return
|
|
|
|
Base.metadata.create_all(bind=engine)
|
|
db = SessionLocal()
|
|
try:
|
|
user = db.query(AdminUser).filter(AdminUser.username == email).first()
|
|
if user is None:
|
|
user = AdminUser(username=email, password_hash=hash_password(password))
|
|
db.add(user)
|
|
print(f"[seed_demo] created demo admin {email}")
|
|
else:
|
|
user.password_hash = hash_password(password)
|
|
print(f"[seed_demo] updated demo admin {email}")
|
|
db.commit()
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|