diff --git a/home-apps/demo-service/_loaders.py b/home-apps/demo-service/_loaders.py
index 541e715..3dcc059 100644
--- a/home-apps/demo-service/_loaders.py
+++ b/home-apps/demo-service/_loaders.py
@@ -4,7 +4,7 @@ _ep = _here / "error-page.html"
if _ep.exists():
AUTH_REQUIRED_HTML = _ep.read_text()
else:
- AUTH_REQUIRED_HTML = """
Page not available
Try again later.
"""
+ AUTH_REQUIRED_HTML = """UnavailableThis page isn't available right now
Try again later.
Log in """
# Admin UI
_ui = _here / "admin-ui.html"
diff --git a/home-apps/demo-service/service.py b/home-apps/demo-service/service.py
index d065c06..81d5e8e 100644
--- a/home-apps/demo-service/service.py
+++ b/home-apps/demo-service/service.py
@@ -27,7 +27,11 @@ import _db
app = FastAPI(title="Demo Manager", version="2.0.0")
# ─── Internal network detection ───────────
-INTERNAL_NETS = [ipaddress.ip_network("192.168.1.0/24")]
+INTERNAL_NETS = [
+ ipaddress.ip_network("192.168.1.0/24"),
+ # Router's WAN IP — internal traffic via NAT appears from this IP
+ ipaddress.ip_network("14.137.198.99/32"),
+]
def is_internal_ip(request: Request) -> bool:
@@ -38,10 +42,11 @@ def is_internal_ip(request: Request) -> bool:
else:
# Fallback: X-Real-IP (set by nginx ingress) or direct connection
client_ip = request.headers.get("X-Real-IP", "")
- if not client_ip and request.client:
- client_ip = request.client.host
- else:
- return False
+ if not client_ip:
+ if request.client:
+ client_ip = request.client.host
+ else:
+ return False
try:
ip = ipaddress.ip_address(client_ip)
return any(ip in net for net in INTERNAL_NETS)