import { useEffect, useState, type ReactNode } from "react"; import { Routes, Route, Navigate } from "react-router-dom"; import { api, type CurrentUser, type UserRole, UnauthorizedError } from "./api/client"; import Login from "./pages/Login"; import Dashboard from "./pages/Dashboard"; import Users from "./pages/Users"; import Sessions from "./pages/Sessions"; import AuditLog from "./pages/AuditLog"; import DiagLog from "./pages/DiagLog"; import Secrets from "./pages/Secrets"; import Ipam from "./pages/Ipam"; import Dns from "./pages/Dns"; import Servers from "./pages/Servers"; import ServerDetail from "./pages/ServerDetail"; import Integrations from "./pages/Integrations"; import Docker from "./pages/Docker"; import Tailscale from "./pages/Tailscale"; import Semaphore from "./pages/Semaphore"; import Gitea from "./pages/Gitea"; import Proxmox from "./pages/Proxmox"; import Synology from "./pages/Synology"; import Generator from "./pages/Generator"; import Maintenance from "./pages/Maintenance"; import Domains from "./pages/Domains"; import Settings from "./pages/Settings"; import NotificationSettings from "./pages/settings/NotificationSettings"; import BadgeSettings from "./pages/settings/BadgeSettings"; import DisplaySettings from "./pages/settings/DisplaySettings"; import CacheSettings from "./pages/settings/CacheSettings"; import LogSettings from "./pages/settings/LogSettings"; import BackupSettings from "./pages/settings/BackupSettings"; import AppShell from "./layout/AppShell"; import { setDateTimeSettings } from "./utils/date"; import { setPageSize } from "./utils/pageSize"; const roleRank: Record = { viewer: 0, operator: 1, admin: 2 }; function RequireRole({ user, minRole, children, }: { user: CurrentUser; minRole: UserRole; children: ReactNode; }) { if (roleRank[user.role] < roleRank[minRole]) { return (
You don't have permission to view this page.
); } return <>{children}; } export default function App() { const [user, setUser] = useState(undefined); useEffect(() => { api.me().then( (res) => setUser(res.user), (err) => { if (!(err instanceof UnauthorizedError)) { console.error(err); } setUser(null); }, ); api.settings.display().then((res) => { setDateTimeSettings(res.display); setPageSize(res.display.pageSize); }).catch(() => {}); }, []); if (user === undefined) { return
Loading…
; } if (user === null) { return ; } return ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } > } /> } /> } /> } /> } /> } /> } /> ); }