From c5f477b8bc2e402e038efa391213f1c14194f0d3 Mon Sep 17 00:00:00 2001 From: dekun Date: Thu, 30 Jul 2026 13:47:50 +0800 Subject: [PATCH] Hide username and logout on LAN clients in control header. Co-authored-by: Cursor --- control/backend/app/api/auth_routes.py | 5 ++++ control/frontend/src/App.tsx | 40 ++++++++++++++++---------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/control/backend/app/api/auth_routes.py b/control/backend/app/api/auth_routes.py index 8bcbaff..60c64b8 100644 --- a/control/backend/app/api/auth_routes.py +++ b/control/backend/app/api/auth_routes.py @@ -86,15 +86,20 @@ async def login( @router.get("/me") async def me( + request: Request, username: Annotated[str, Depends(require_control_user)], settings: Annotated[ControlSettings, Depends(get_control_settings)], ) -> dict: + ip = client_ip(request) + lan = is_lan_ip(ip) return { "username": username, "poll_interval_sec": settings.control_poll_interval_sec, "sse_interval_sec": settings.control_sse_interval_sec, "show_default_hint": settings.is_default_credentials, "lan_bypass_enabled": settings.lan_auth_bypass, + "lan_client": lan, + "client_ip": ip or None, } diff --git a/control/frontend/src/App.tsx b/control/frontend/src/App.tsx index 8b83020..362ab45 100644 --- a/control/frontend/src/App.tsx +++ b/control/frontend/src/App.tsx @@ -1,4 +1,4 @@ -import { type ReactNode } from "react"; +import { type ReactNode, useEffect, useState } from "react"; import { NavLink, Navigate, @@ -6,13 +6,21 @@ import { Routes, useLocation, } from "react-router-dom"; -import { clearSession, getToken, getUsername } from "./api"; +import { apiFetch, clearSession, getToken, getUsername } from "./api"; import LoginPage from "./pages/Login"; import MonitorPage from "./pages/Monitor"; import SettingsPage from "./pages/Settings"; function Shell({ children }: { children: ReactNode }) { const user = getUsername(); + const [lanClient, setLanClient] = useState(false); + + useEffect(() => { + apiFetch<{ lan_client?: boolean }>("/api/auth/me") + .then((m) => setLanClient(!!m.lan_client)) + .catch(() => setLanClient(false)); + }, []); + return (
@@ -25,19 +33,21 @@ function Shell({ children }: { children: ReactNode }) { 系统设置 -
- {user} - -
+ {!lanClient ? ( +
+ {user} + +
+ ) : null}
{children}