29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
from __future__ import annotations
|
|
|
|
import click
|
|
from flask import Flask
|
|
|
|
from app.extensions import db
|
|
from app.models import Account, Role
|
|
|
|
|
|
def register_commands(app: Flask) -> None:
|
|
@app.cli.command("create-admin")
|
|
@click.option("--username", prompt=True)
|
|
@click.option("--email", prompt=True)
|
|
@click.option("--full-name", prompt=True)
|
|
@click.password_option()
|
|
def create_admin(username: str, email: str, full_name: str, password: str) -> None:
|
|
"""Create an initial administrator account."""
|
|
username = username.strip().lower()
|
|
email = email.strip().lower()
|
|
|
|
if Account.query.filter((Account.username == username) | (Account.email == email)).first():
|
|
raise click.ClickException("An account with that username or email already exists.")
|
|
|
|
account = Account(username=username, email=email, full_name=full_name.strip(), role=Role.ADMIN.value)
|
|
account.set_password(password)
|
|
db.session.add(account)
|
|
db.session.commit()
|
|
click.echo(f"Created admin account: {username}")
|