./knowledge-base/frontend/src/App.tsx
import { Routes, Route } from "react-router-dom";
import { Box } from "@mui/material";
import { AuthProvider } from "./auth/AuthContext";
import { ProtectedRoute } from "./auth/ProtectedRoute";
import HomePage from "./pages/HomePage";
import SearchPage from "./pages/SearchPage";
import UploadPage from "./pages/UploadPage";
import LoginCallbackPage from "./pages/LoginCallbackPage";
import MaintenancePage from "./pages/MaintenancePage";
/**
* アプリケーションルート
*
* 認証フロー:
* 1. 未認証ユーザーが / /search /upload にアクセス
* 2. ProtectedRoute が Okta ログインページへリダイレクト
* 3. Okta 認証後、/login/callback に戻ってくる
* 4. LoginCallbackPage がトークンを処理し / へ遷移
*/
function App() {
return (
<AuthProvider>
<Box sx={{ minHeight: "100vh", bgcolor: "#f5f5f5" }}>
<Routes>
{/* Okta コールバック(認証ガード不要) */}
<Route path="/login/callback" element={<LoginCallbackPage />} />
{/* 全ルートを認証ガードで保護 */}
<Route
path="/"
element={
<ProtectedRoute>
<HomePage />
</ProtectedRoute>
}
/>
<Route
path="/search"
element={
<ProtectedRoute>
<SearchPage />
</ProtectedRoute>
}
/>
<Route
path="/upload"
element={
<ProtectedRoute>
<UploadPage />
</ProtectedRoute>
}
/>
<Route
path="/maintenance"
element={
<ProtectedRoute>
<MaintenancePage />
</ProtectedRoute>
}
/>
</Routes>
</Box>
</AuthProvider>
);
}
export default App;