INNER CODE UNIT · Python
lan_access_gate
slive777/OpenAver · web/app.py:487
async def lan_access_gate(request: Request, call_next):
"""
非 loopback 流量依 general.server_mode 決定放行或 403。
Loopback 短路:不讀 config,零成本(與 _lan_access_allowed 共用 _LOOPBACK_HOSTS)。
不信任 X-Forwarded-For(無反向 proxy;只用 TCP 對端 request.client.host)。
"""
client = request.client
client_host = client.host if client else None
# loopback 短路:桌面 App 自連,零 config I/O
if client_host in _LOOPBACK_HOSTS:
return await call_next(request)
# 非 loopback:讀 config 後委派決策核心(測得即所跑)
server_mode = load_config().get("general", {}).get("server_mode", False)
if _lan_access_allowed(client_host, server_mode):
return await call_next(request)
return PlainTextResponse("Forbidden", status_code=403)