"use client"; import { useState } from "react"; import { CheckCircle2, XCircle } from "lucide-react"; interface Status { configured: boolean; enabled: boolean; host: string | null; port: number | null; useTls: boolean; bindDn: string | null; baseDn: string | null; userFilter: string | null; listFilter: string | null; defaultRole: "admin" | "agent"; verifiedAt: number | null; } export function LdapSettingsForm({ initialStatus }: { initialStatus: Status }) { const [status, setStatus] = useState(initialStatus); const [host, setHost] = useState(initialStatus.host ?? ""); const [port, setPort] = useState(String(initialStatus.port ?? 389)); const [useTls, setUseTls] = useState(initialStatus.useTls); const [bindDn, setBindDn] = useState(initialStatus.bindDn ?? ""); const [bindPassword, setBindPassword] = useState(""); const [baseDn, setBaseDn] = useState(initialStatus.baseDn ?? ""); const [userFilter, setUserFilter] = useState(initialStatus.userFilter ?? "(mail={{email}})"); const [listFilter, setListFilter] = useState(initialStatus.listFilter ?? "(objectClass=person)"); const [defaultRole, setDefaultRole] = useState<"admin" | "agent">(initialStatus.defaultRole); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); async function handleConnect(e: React.FormEvent) { e.preventDefault(); setLoading(true); setError(null); const res = await fetch("/api/ldap/config", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ host, port: Number(port), useTls, bindDn, bindPassword, baseDn, userFilter, listFilter, defaultRole, }), }); setLoading(false); if (!res.ok) { const data = await res.json().catch(() => null); setError(data?.error ?? "Не удалось подключить LDAP"); return; } setStatus({ configured: true, enabled: true, host, port: Number(port), useTls, bindDn, baseDn, userFilter, listFilter, defaultRole, verifiedAt: Date.now(), }); setBindPassword(""); } async function handleDisable() { setLoading(true); await fetch("/api/ldap/config", { method: "DELETE" }); setLoading(false); setStatus((s) => ({ ...s, enabled: false })); } return (
{status.enabled ? ( <> Подключено: {status.host} ) : ( <> LDAP не подключён )}
{error &&

{error}

}
{status.enabled && ( )}
); }