accujuris-api / scripts /setup_admin.py
arnavam's picture
Initial HuggingFace deployment
cd3078d
import argparse
import asyncio
import sys
from datetime import datetime, timezone
from pathlib import Path
from typing import Optional
# Ensure "app" imports work when running this file directly.
BACKEND_ROOT = Path(__file__).resolve().parent.parent
if str(BACKEND_ROOT) not in sys.path:
sys.path.insert(0, str(BACKEND_ROOT))
from app.auth import hash_password
from app.database import close_db, connect_db, get_db
async def setup_admin(email: str, name: str, password: Optional[str]) -> None:
await connect_db()
try:
db = get_db()
existing = await db.users.find_one({"email": email})
if existing:
update_fields = {"role": "admin", "is_approved": True}
if password:
update_fields["password_hash"] = hash_password(password)
await db.users.update_one({"_id": existing["_id"]}, {"$set": update_fields})
print(f"Promoted existing user to admin: {email}")
else:
if not password:
raise ValueError("Password is required when creating a new admin user.")
await db.users.insert_one(
{
"email": email,
"name": name,
"password_hash": hash_password(password),
"role": "admin",
"is_approved": True,
"token_version": 0,
"created_at": datetime.now(timezone.utc),
}
)
print(f"Created new admin user: {email}")
finally:
await close_db()
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Create or promote an admin user."
)
parser.add_argument("--email", required=True, help="Admin user email")
parser.add_argument("--name", default="Admin", help="Admin display name for new users")
parser.add_argument(
"--password",
default=None,
help="Password (required for new user, optional for existing user)",
)
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
asyncio.run(setup_admin(args.email, args.name, args.password))