Conflict resolution left webui/lease_loader.py importing ISSUE_LOCK_FILE from merged_cleanup_reconcile (not exported); import from issue_lock_provenance instead. Validate WEBUI_HOST before loading the full app stack so 0.0.0.0 refuse exits immediately. Addresses reviewer findings on PR #456 / issue #435.
37 lines
1017 B
Python
37 lines
1017 B
Python
"""Run the internal web UI: ``python -m webui``."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
import os
|
|
|
|
import uvicorn
|
|
|
|
from webui.deployment_boundary import assess_bind_host
|
|
|
|
logger = logging.getLogger("webui")
|
|
|
|
|
|
def _validate_bind_host(host: str) -> None:
|
|
assessment = assess_bind_host(host)
|
|
if assessment.disposition == "refuse":
|
|
logger.error("webui bind refused: %s", assessment.message)
|
|
raise SystemExit(1)
|
|
if assessment.disposition == "warn":
|
|
logger.warning("webui bind warning: %s", assessment.message)
|
|
|
|
|
|
def main() -> None:
|
|
host = os.environ.get("WEBUI_HOST", "127.0.0.1")
|
|
port = int(os.environ.get("WEBUI_PORT", "8765"))
|
|
# Validate bind host before importing the full app stack so refuse paths
|
|
# fail closed quickly (tests and operators must not hang on create_app).
|
|
_validate_bind_host(host)
|
|
from webui.app import create_app
|
|
|
|
uvicorn.run(create_app(), host=host, port=port, log_level="info")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|