feat: seed
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import os
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.passwords import hash_password
|
||||
from app.db import SessionLocal
|
||||
from app.models import OAuthClient, User
|
||||
|
||||
ADMIN_EMAIL = os.getenv("SEED_ADMIN_EMAIL", "admin@example.com")
|
||||
ADMIN_PASSWORD = os.getenv("SEED_ADMIN_PASSWORD", "Kz8#Fj2!Lm9@Qw4$xR")
|
||||
DEMO_EMAIL = os.getenv("SEED_USER_EMAIL", "user@example.com")
|
||||
DEMO_PASSWORD = os.getenv("SEED_USER_PASSWORD", "DemoUser-Pass#2024")
|
||||
DEMO_CLIENT_ID = "demo-client"
|
||||
DEMO_CLIENT_URIS = ["https://example.com/callback"]
|
||||
|
||||
|
||||
def upsert_user(db: Session, email: str, password: str, is_admin: bool) -> User:
|
||||
user = db.scalar(select(User).where(User.email == email))
|
||||
if user is None:
|
||||
user = User(email=email, hashed_password=hash_password(password))
|
||||
db.add(user)
|
||||
user.is_admin = is_admin
|
||||
user.is_active = True
|
||||
db.commit()
|
||||
db.refresh(user)
|
||||
return user
|
||||
|
||||
|
||||
def upsert_client(db: Session) -> OAuthClient:
|
||||
client = db.scalar(
|
||||
select(OAuthClient).where(OAuthClient.client_id == DEMO_CLIENT_ID)
|
||||
)
|
||||
if client is None:
|
||||
client = OAuthClient(client_id=DEMO_CLIENT_ID, name="Demo App")
|
||||
db.add(client)
|
||||
client.name = "Demo App"
|
||||
client.is_confidential = True
|
||||
client.redirect_uris = DEMO_CLIENT_URIS
|
||||
db.commit()
|
||||
db.refresh(client)
|
||||
return client
|
||||
|
||||
|
||||
def main() -> None:
|
||||
db = SessionLocal()
|
||||
try:
|
||||
admin = upsert_user(db, ADMIN_EMAIL, ADMIN_PASSWORD, is_admin=True)
|
||||
demo = upsert_user(db, DEMO_EMAIL, DEMO_PASSWORD, is_admin=False)
|
||||
client = upsert_client(db)
|
||||
summary = [
|
||||
(admin.email, admin.id),
|
||||
(demo.email, demo.id),
|
||||
(client.client_id, client.name),
|
||||
]
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
admin_email, admin_id = summary[0]
|
||||
demo_email, demo_id = summary[1]
|
||||
client_id, client_name = summary[2]
|
||||
print("Seed complete:")
|
||||
print(f" admin {admin_email} / {ADMIN_PASSWORD} (id={admin_id})")
|
||||
print(f" user {demo_email} / {DEMO_PASSWORD} (id={demo_id})")
|
||||
print(f" client {client_id} - {client_name}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user