diff --git a/components/settings-dialog.tsx b/components/settings-dialog.tsx
index b5570b2..3779ad2 100644
--- a/components/settings-dialog.tsx
+++ b/components/settings-dialog.tsx
@@ -6,7 +6,6 @@ import {
Dialog,
DialogContent,
DialogDescription,
- DialogFooter,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog"
@@ -22,6 +21,14 @@ interface SettingsDialogProps {
export const STORAGE_ACCESS_CODE_KEY = "next-ai-draw-io-access-code"
export const STORAGE_CLOSE_PROTECTION_KEY = "next-ai-draw-io-close-protection"
+const STORAGE_ACCESS_CODE_REQUIRED_KEY = "next-ai-draw-io-access-code-required"
+
+function getStoredAccessCodeRequired(): boolean | null {
+ if (typeof window === "undefined") return null
+ const stored = localStorage.getItem(STORAGE_ACCESS_CODE_REQUIRED_KEY)
+ if (stored === null) return null
+ return stored === "true"
+}
export function SettingsDialog({
open,
@@ -32,6 +39,32 @@ export function SettingsDialog({
const [closeProtection, setCloseProtection] = useState(true)
const [isVerifying, setIsVerifying] = useState(false)
const [error, setError] = useState("")
+ const [accessCodeRequired, setAccessCodeRequired] = useState(
+ () => getStoredAccessCodeRequired() ?? false,
+ )
+
+ useEffect(() => {
+ // Only fetch if not cached in localStorage
+ if (getStoredAccessCodeRequired() !== null) return
+
+ fetch("/api/config")
+ .then((res) => {
+ if (!res.ok) throw new Error(`HTTP ${res.status}`)
+ return res.json()
+ })
+ .then((data) => {
+ const required = data?.accessCodeRequired === true
+ localStorage.setItem(
+ STORAGE_ACCESS_CODE_REQUIRED_KEY,
+ String(required),
+ )
+ setAccessCodeRequired(required)
+ })
+ .catch(() => {
+ // Don't cache on error - allow retry on next mount
+ setAccessCodeRequired(false)
+ })
+ }, [])
useEffect(() => {
if (open) {
@@ -49,11 +82,12 @@ export function SettingsDialog({
}, [open])
const handleSave = async () => {
+ if (!accessCodeRequired) return
+
setError("")
setIsVerifying(true)
try {
- // Verify access code with server
const response = await fetch("/api/verify-access-code", {
method: "POST",
headers: {
@@ -65,17 +99,10 @@ export function SettingsDialog({
if (!data.valid) {
setError(data.message || "Invalid access code")
- setIsVerifying(false)
return
}
- // Save settings only if verification passes
localStorage.setItem(STORAGE_ACCESS_CODE_KEY, accessCode.trim())
- localStorage.setItem(
- STORAGE_CLOSE_PROTECTION_KEY,
- closeProtection.toString(),
- )
- onCloseProtectionChange?.(closeProtection)
onOpenChange(false)
} catch {
setError("Failed to verify access code")
@@ -97,31 +124,42 @@ export function SettingsDialog({
- Required if the server has enabled access control. -
- {error && ( -- {error} + {accessCodeRequired && ( +
+ Required to use this application.
- )} -+ {error} +
+ )} +