"use client"; import { useState, useEffect } from "react"; import { Card, Button, Input } from "@/shared/components"; import { useRouter } from "next/navigation"; export default function LoginPage() { const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const [hasPassword, setHasPassword] = useState(null); const router = useRouter(); useEffect(() => { async function checkAuth() { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000); const baseUrl = typeof window !== "undefined" ? window.location.origin : ""; try { const res = await fetch(`${baseUrl}/api/settings`, { signal: controller.signal, }); clearTimeout(timeoutId); if (res.ok) { const data = await res.json(); if (data.requireLogin === false) { router.push("/dashboard"); router.refresh(); return; } setHasPassword(!!data.hasPassword); } else { // Safe fallback on non-OK response to avoid infinite loading state. setHasPassword(true); } } catch (err) { clearTimeout(timeoutId); setHasPassword(true); } } checkAuth(); }, [router]); const handleLogin = async (e) => { e.preventDefault(); setLoading(true); setError(""); try { const res = await fetch("/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ password }), }); if (res.ok) { router.push("/dashboard"); router.refresh(); } else { const data = await res.json(); setError(data.error || "Invalid password"); } } catch (err) { setError("An error occurred. Please try again."); } finally { setLoading(false); } }; // Show loading state while checking password if (hasPassword === null) { return (

Loading...

); } return (
{/* Faint grid background */} ); }