diff --git a/webui/src/common/contexts/Token/TokenContext.jsx b/webui/src/common/contexts/Token/TokenContext.jsx new file mode 100644 index 0000000..52ab0fd --- /dev/null +++ b/webui/src/common/contexts/Token/TokenContext.jsx @@ -0,0 +1,37 @@ +import {useState, createContext, useEffect} from "react"; +import {request} from "@/common/utils/RequestUtil.js"; +import {Alert, Snackbar} from "@mui/material"; +import {t} from "i18next"; + +export const TokenContext = createContext({}); + +export const TokenProvider = (props) => { + const [tokenValid, setTokenValid] = useState(null); + const [serverOnline, setServerOnline] = useState(null); + + const checkToken = () => request("ping").then((r) => { + if (!r.ok && !(r.status === 400 || r.status === 401)) throw new Error("Server unavailable"); + setTokenValid(r.status === 200); + setServerOnline(true); + return r.status === 200; + }).catch(() => { + setServerOnline(false); + }); + + useEffect(() => { + checkToken(); + const interval = setInterval(() => checkToken(), 10000); + return () => clearInterval(interval); + }, []); + + return ( + + + + {t("info.server_unavailable")} + + + {props.children} + + ) +} \ No newline at end of file