start
This commit is contained in:
41
backend/app/cli.py
Normal file
41
backend/app/cli.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import asyncio
|
||||
import getpass
|
||||
|
||||
import typer
|
||||
from sqlalchemy import select
|
||||
|
||||
from app.core.security import hash_password
|
||||
from app.db.session import async_session_maker
|
||||
from app.models.user import User
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
|
||||
@app.command()
|
||||
def create_admin(username: str = typer.Option(..., prompt=True)) -> None:
|
||||
"""Create an admin user for the inventory backend."""
|
||||
password = getpass.getpass("Password: ")
|
||||
confirm = getpass.getpass("Confirm password: ")
|
||||
if password != confirm:
|
||||
typer.echo("Passwords do not match", err=True)
|
||||
raise typer.Exit(code=1)
|
||||
if len(password) < 8:
|
||||
typer.echo("Password must be at least 8 characters", err=True)
|
||||
raise typer.Exit(code=1)
|
||||
|
||||
asyncio.run(_create_admin(username, password))
|
||||
typer.echo(f"Created user '{username}'")
|
||||
|
||||
|
||||
async def _create_admin(username: str, password: str) -> None:
|
||||
async with async_session_maker() as db:
|
||||
existing = await db.execute(select(User).where(User.username == username))
|
||||
if existing.scalar_one_or_none() is not None:
|
||||
typer.echo(f"User '{username}' already exists", err=True)
|
||||
raise typer.Exit(code=1)
|
||||
db.add(User(username=username, hashed_password=hash_password(password)))
|
||||
await db.commit()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app()
|
||||
Reference in New Issue
Block a user