import AppLayout from '@/Layouts/AppLayout'; import { Head, useForm, router } from '@inertiajs/react'; import { useState } from 'react'; import { Globe, CheckCircle, XCircle, RefreshCw } from 'lucide-react'; import { GlassCard } from '@/Components/ui/GlassCard'; import { Button } from '@/Components/ui/Button'; import { cn } from '@/lib/utils'; import { motion } from 'framer-motion'; function Input({ className, ...props }) { return ; } function Field({ label, desc, children }) { return (

{label}

{desc &&

{desc}

}
{children}
); } export default function LdapConfig({ config }) { const { data, setData, put, processing } = useForm({ host: config?.host ?? '', port: config?.port ?? 389, use_ssl: config?.use_ssl ?? false, use_tls: config?.use_tls ?? false, base_dn: config?.base_dn ?? '', bind_dn: config?.bind_dn ?? '', bind_password: '', user_search_base: config?.user_search_base ?? '', user_filter: config?.user_filter ?? '(sAMAccountName={username})', admin_group_dn: config?.admin_group_dn ?? '', is_active: config?.is_active ?? false, }); const [testResult, setTestResult] = useState(null); const [testing, setTesting] = useState(false); const [syncing, setSyncing] = useState(false); const test = async () => { setTesting(true); setTestResult(null); try { const res = await fetch('/admin/ldap/test', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': document.querySelector('meta[name=csrf-token]').content }, body: JSON.stringify(data), }); setTestResult(await res.json()); } catch (e) { setTestResult({ success: false, message: e.message }); } finally { setTesting(false); } }; const sync = () => { setSyncing(true); router.post('/admin/ldap/sync', {}, { onFinish: () => setSyncing(false) }); }; return (

LDAP / Active Directory

Integrate with your directory service for SSO

{ e.preventDefault(); put('/admin/ldap'); }}>

Connection

setData('host', e.target.value)} placeholder="ldap.company.com" /> setData('port', parseInt(e.target.value))} />
{[['use_ssl', 'LDAPS (SSL)'], ['use_tls', 'STARTTLS']].map(([k, l]) => ( ))}

Bind / Authentication

setData('base_dn', e.target.value)} placeholder="DC=company,DC=com" /> setData('bind_dn', e.target.value)} placeholder="CN=ldap-reader,CN=Users,DC=company,DC=com" /> setData('bind_password', e.target.value)} placeholder="Leave blank to keep existing" />

User Search

setData('user_search_base', e.target.value)} placeholder="CN=Users,DC=company,DC=com" /> setData('user_filter', e.target.value)} /> setData('admin_group_dn', e.target.value)} placeholder="CN=Infra-Admins,CN=Groups,..." />
{testResult && ( {testResult.success ? : } {testResult.message} )}
); }