80 lines
3.2 KiB
Python
80 lines
3.2 KiB
Python
import click
|
|
from flask.cli import with_appcontext
|
|
|
|
from .extensions import db
|
|
from .utils import (
|
|
ensure_database_ready,
|
|
init_database_with_retry,
|
|
safe_db_rollback,
|
|
set_login_hosts,
|
|
set_user_password,
|
|
)
|
|
|
|
|
|
def register_cli_commands(app):
|
|
@app.cli.command("init-db")
|
|
@click.option("--attempts", default=20, type=int, show_default=True)
|
|
@click.option("--delay", default=3, type=int, show_default=True)
|
|
def init_db_command(attempts: int, delay: int):
|
|
"""Inicjalizuje baze i czeka az bedzie gotowa."""
|
|
ok = init_database_with_retry(app, max_attempts=attempts, delay=delay, raise_on_failure=False)
|
|
if not ok:
|
|
raise click.ClickException("Nie udalo sie zainicjalizowac bazy danych.")
|
|
click.echo("Baza danych gotowa.")
|
|
|
|
@app.cli.command("set-admin-password")
|
|
@click.option("--username", default="admin", show_default=True)
|
|
@click.option("--password", prompt=True, hide_input=True, confirmation_prompt=True)
|
|
@with_appcontext
|
|
def set_admin_password_command(username: str, password: str):
|
|
"""Ustawia haslo administratora."""
|
|
try:
|
|
ensure_database_ready(create_schema=True, create_admin=True)
|
|
user = set_user_password(username=username, password=password, is_admin=True)
|
|
click.echo(f"Haslo admina ustawione dla uzytkownika: {user.uzytkownik}")
|
|
except Exception as exc:
|
|
safe_db_rollback()
|
|
raise click.ClickException(str(exc))
|
|
|
|
@app.cli.command("set-user-password")
|
|
@click.argument("username")
|
|
@click.option("--password", prompt=True, hide_input=True, confirmation_prompt=True)
|
|
@click.option("--admin/--no-admin", default=None)
|
|
@with_appcontext
|
|
def set_user_password_command(username: str, password: str, admin: bool | None):
|
|
"""Tworzy uzytkownika lub zmienia jego haslo."""
|
|
try:
|
|
ensure_database_ready(create_schema=True, create_admin=True)
|
|
user = set_user_password(username=username, password=password, is_admin=admin)
|
|
click.echo(f"Haslo ustawione dla uzytkownika: {user.uzytkownik}")
|
|
except Exception as exc:
|
|
safe_db_rollback()
|
|
raise click.ClickException(str(exc))
|
|
|
|
@app.cli.command("set-login-hosts")
|
|
@click.argument("hosts", required=False, default="")
|
|
@with_appcontext
|
|
def set_login_hosts_command(hosts: str):
|
|
"""Ustawia dozwolone hosty lub IP do logowania."""
|
|
try:
|
|
ensure_database_ready(create_schema=True, create_admin=True)
|
|
settings = set_login_hosts(hosts)
|
|
click.echo(
|
|
"Dozwolone hosty logowania ustawione na: "
|
|
f"{settings.dozwolone_hosty_logowania or '(brak - logowanie zablokowane)'}"
|
|
)
|
|
except Exception as exc:
|
|
safe_db_rollback()
|
|
raise click.ClickException(str(exc))
|
|
|
|
@app.cli.command("db-ping")
|
|
@with_appcontext
|
|
def db_ping_command():
|
|
"""Sprawdza polaczenie z baza danych."""
|
|
try:
|
|
ensure_database_ready(create_schema=False, create_admin=False)
|
|
click.echo("OK")
|
|
except Exception as exc:
|
|
safe_db_rollback()
|
|
raise click.ClickException(f"DB ERROR: {exc}")
|