first commit
This commit is contained in:
40
app/cli.py
Normal file
40
app/cli.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import click
|
||||
from flask.cli import with_appcontext
|
||||
|
||||
from .extensions import db
|
||||
from .models import User
|
||||
|
||||
|
||||
@click.command("init-db")
|
||||
@click.option("--admin-user", required=True, help="Username for the initial admin")
|
||||
@click.option("--admin-pass", required=True, help="Password for the initial admin")
|
||||
@with_appcontext
|
||||
def init_db_command(admin_user: str, admin_pass: str):
|
||||
"""Create tables and ensure an admin account exists."""
|
||||
db.create_all()
|
||||
|
||||
# Lightweight migration for older SQLite DBs: ensure User.email column exists.
|
||||
# This avoids requiring Alembic for this small project.
|
||||
try:
|
||||
cols = [r[1] for r in db.session.execute(db.text("PRAGMA table_info(user)")).fetchall()]
|
||||
if "email" not in cols:
|
||||
db.session.execute(db.text("ALTER TABLE user ADD COLUMN email VARCHAR(255)"))
|
||||
db.session.commit()
|
||||
except Exception:
|
||||
# Best-effort; if it fails we continue so fresh DBs still work.
|
||||
db.session.rollback()
|
||||
|
||||
existing = User.query.filter_by(username=admin_user).first()
|
||||
if existing:
|
||||
if not existing.is_admin:
|
||||
existing.is_admin = True
|
||||
existing.set_password(admin_pass)
|
||||
db.session.commit()
|
||||
click.echo(f"Updated admin user '{admin_user}'.")
|
||||
return
|
||||
|
||||
u = User(username=admin_user, is_admin=True)
|
||||
u.set_password(admin_pass)
|
||||
db.session.add(u)
|
||||
db.session.commit()
|
||||
click.echo(f"Created admin user '{admin_user}'.")
|
||||
Reference in New Issue
Block a user