"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useEffect } from "react"; import { LocalModeBanner } from "@/components/local-mode-banner"; import { PageTransition } from "@/components/page-transition"; import { useCurrentUser, useLogout, useSystemStatus } from "@/hooks/use-auth"; import { isLocalConvenience } from "@/lib/auth"; export default function DashboardLayout({ children }: { children: React.ReactNode }) { const router = useRouter(); const { data: systemStatus } = useSystemStatus(); const { data: user, isLoading, isError } = useCurrentUser(); const logout = useLogout(); const requiresLogin = systemStatus ? !isLocalConvenience(systemStatus) : false; const mustChangePassword = user?.must_change_password ?? false; useEffect(() => { if (requiresLogin && !isLoading && isError) { router.replace("/login"); } }, [requiresLogin, isLoading, isError, router]); useEffect(() => { if (mustChangePassword) { router.replace("/change-password"); } }, [mustChangePassword, router]); if (requiresLogin && (isLoading || isError)) { return (
Loading…
); } // Every API call except /auth/me, /auth/change-password, and /auth/logout // 403s server-side while this is set (app/auth/dependencies.py) - this is // just the matching frontend redirect, not the actual enforcement. if (mustChangePassword) { return (
Redirecting…
); } return (
CI Agent
{children}
); }