91 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import React from "react";
 | |
| import {
 | |
|   Route,
 | |
|   RouterProvider,
 | |
|   createBrowserRouter,
 | |
|   createRoutesFromElements,
 | |
| } from "react-router-dom";
 | |
| import "./App.css";
 | |
| import { AuthApi } from "./api/AuthApi";
 | |
| import { ServerApi } from "./api/ServerApi";
 | |
| import {
 | |
|   CreateNetworkRoute,
 | |
|   EditNetworkRoute,
 | |
| } from "./routes/EditNetworkRoute";
 | |
| import { CreateVMRoute, EditVMRoute } from "./routes/EditVMRoute";
 | |
| import { IsoFilesRoute } from "./routes/IsoFilesRoute";
 | |
| import { NetworksListRoute } from "./routes/NetworksListRoute";
 | |
| import { NotFoundRoute } from "./routes/NotFound";
 | |
| import { SysInfoRoute } from "./routes/SysInfoRoute";
 | |
| import { VMListRoute } from "./routes/VMListRoute";
 | |
| import { VMRoute } from "./routes/VMRoute";
 | |
| import { VNCRoute } from "./routes/VNCRoute";
 | |
| import { LoginRoute } from "./routes/auth/LoginRoute";
 | |
| import { OIDCCbRoute } from "./routes/auth/OIDCCbRoute";
 | |
| import { BaseAuthenticatedPage } from "./widgets/BaseAuthenticatedPage";
 | |
| import { BaseLoginPage } from "./widgets/BaseLoginPage";
 | |
| import { ViewNetworkRoute } from "./routes/ViewNetworkRoute";
 | |
| import { VMXMLRoute } from "./routes/VMXMLRoute";
 | |
| import { NetXMLRoute } from "./routes/NetXMLRoute";
 | |
| import { HomeRoute } from "./routes/HomeRoute";
 | |
| 
 | |
| interface AuthContext {
 | |
|   signedIn: boolean;
 | |
|   setSignedIn: (signedIn: boolean) => void;
 | |
| }
 | |
| 
 | |
| const AuthContextK = React.createContext<AuthContext | null>(null);
 | |
| 
 | |
| export function App() {
 | |
|   const [signedIn, setSignedIn] = React.useState(AuthApi.SignedIn);
 | |
| 
 | |
|   const context: AuthContext = {
 | |
|     signedIn: signedIn,
 | |
|     setSignedIn: (s) => setSignedIn(s),
 | |
|   };
 | |
| 
 | |
|   const router = createBrowserRouter(
 | |
|     createRoutesFromElements(
 | |
|       signedIn || ServerApi.Config.auth_disabled ? (
 | |
|         <Route path="*" element={<BaseAuthenticatedPage />}>
 | |
|           <Route path="" element={<HomeRoute />} />
 | |
| 
 | |
|           <Route path="iso" element={<IsoFilesRoute />} />
 | |
| 
 | |
|           <Route path="vms" element={<VMListRoute />} />
 | |
|           <Route path="vms/new" element={<CreateVMRoute />} />
 | |
|           <Route path="vm/:uuid" element={<VMRoute />} />
 | |
|           <Route path="vm/:uuid/edit" element={<EditVMRoute />} />
 | |
|           <Route path="vm/:uuid/vnc" element={<VNCRoute />} />
 | |
|           <Route path="vm/:uuid/xml" element={<VMXMLRoute />} />
 | |
| 
 | |
|           <Route path="net" element={<NetworksListRoute />} />
 | |
|           <Route path="net/new" element={<CreateNetworkRoute />} />
 | |
|           <Route path="net/:uuid" element={<ViewNetworkRoute />} />
 | |
|           <Route path="net/:uuid/edit" element={<EditNetworkRoute />} />
 | |
|           <Route path="net/:uuid/xml" element={<NetXMLRoute />} />
 | |
| 
 | |
|           <Route path="sysinfo" element={<SysInfoRoute />} />
 | |
|           <Route path="*" element={<NotFoundRoute />} />
 | |
|         </Route>
 | |
|       ) : (
 | |
|         <Route path="*" element={<BaseLoginPage />}>
 | |
|           <Route path="" element={<LoginRoute />} />
 | |
|           <Route path="oidc_cb" element={<OIDCCbRoute />} />
 | |
|           <Route path="*" element={<NotFoundRoute />} />
 | |
|         </Route>
 | |
|       )
 | |
|     )
 | |
|   );
 | |
| 
 | |
|   return (
 | |
|     <AuthContextK.Provider value={context}>
 | |
|       <RouterProvider router={router} />
 | |
|     </AuthContextK.Provider>
 | |
|   );
 | |
| }
 | |
| 
 | |
| export function useAuth(): AuthContext {
 | |
|   return React.useContext(AuthContextK)!;
 | |
| }
 |