client/web: add localapi proxy

Adds proxy to the localapi from /api/local/ web client endpoint.
The localapi proxy is restricted to an allowlist of those actually
used by the web client frontend.

Updates tailscale/corp#13775

Signed-off-by: Sonia Appasamy <sonia@tailscale.com>
This commit is contained in:
Sonia Appasamy
2023-08-28 16:44:48 -04:00
committed by Sonia Appasamy
parent c919ff540f
commit da6eb076aa
5 changed files with 152 additions and 10 deletions

View File

@ -35,7 +35,7 @@ export default function useNodeData() {
const [data, setData] = useState<NodeData>()
const [isPosting, setIsPosting] = useState<boolean>(false)
const fetchNodeData = useCallback(
const refreshData = useCallback(
() =>
apiFetch("/data")
.then((r) => r.json())
@ -102,7 +102,7 @@ export default function useNodeData() {
if (url) {
window.open(url, "_blank")
}
fetchNodeData()
refreshData()
})
.catch((err) => alert("Failed operation: " + err.message))
},
@ -112,11 +112,11 @@ export default function useNodeData() {
useEffect(
() => {
// Initial data load.
fetchNodeData()
refreshData()
// Refresh on browser tab focus.
const onVisibilityChange = () => {
document.visibilityState === "visible" && fetchNodeData()
document.visibilityState === "visible" && refreshData()
}
window.addEventListener("visibilitychange", onVisibilityChange)
return () => {
@ -128,5 +128,5 @@ export default function useNodeData() {
[]
)
return { data, updateNode, isPosting }
return { data, refreshData, updateNode, isPosting }
}