summaryrefslogtreecommitdiff
path: root/makima/frontend/src/components/ProtectedRoute.tsx
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-06 04:08:11 +0000
committersoryu <soryu@soryu.co>2026-01-11 03:01:13 +0000
commit8b17a175c3e7e27b789812eba4e3cd760beadb10 (patch)
tree7864dcaa2fa9db47fdfd4e8bfdb0b1dde832aa33 /makima/frontend/src/components/ProtectedRoute.tsx
parentf79c416c58557d2f946aa5332989afdfa8c021cd (diff)
downloadsoryu-8b17a175c3e7e27b789812eba4e3cd760beadb10.tar.gz
soryu-8b17a175c3e7e27b789812eba4e3cd760beadb10.zip
Initial Control system
Diffstat (limited to 'makima/frontend/src/components/ProtectedRoute.tsx')
-rw-r--r--makima/frontend/src/components/ProtectedRoute.tsx26
1 files changed, 26 insertions, 0 deletions
diff --git a/makima/frontend/src/components/ProtectedRoute.tsx b/makima/frontend/src/components/ProtectedRoute.tsx
new file mode 100644
index 0000000..32ac592
--- /dev/null
+++ b/makima/frontend/src/components/ProtectedRoute.tsx
@@ -0,0 +1,26 @@
+import { Navigate } from "react-router";
+import { useAuth } from "../contexts/AuthContext";
+
+interface ProtectedRouteProps {
+ children: React.ReactNode;
+}
+
+export function ProtectedRoute({ children }: ProtectedRouteProps) {
+ const { isAuthenticated, isLoading, isAuthConfigured } = useAuth();
+
+ // Show loading state while checking auth
+ if (isLoading) {
+ return (
+ <div className="min-h-screen bg-black text-white flex items-center justify-center">
+ <div className="text-zinc-400">Loading...</div>
+ </div>
+ );
+ }
+
+ // If auth is configured but user is not authenticated, redirect to login
+ if (isAuthConfigured && !isAuthenticated) {
+ return <Navigate to="/login" replace />;
+ }
+
+ return <>{children}</>;
+}