import { useEffect, useState } from 'react'; import { Button, Input, Toggle, FormField, Card, Alert, SectionHeader } from '@cameleer/design-system'; import { adminFetch } from '../../api/queries/admin/admin-api'; interface OidcConfig { enabled: boolean; issuerUri: string; clientId: string; clientSecret: string; rolesClaim: string; defaultRoles: string[]; autoSignup: boolean; displayNameClaim: string; } export default function OidcConfigPage() { const [config, setConfig] = useState(null); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); useEffect(() => { adminFetch('/oidc') .then(setConfig) .catch(() => setConfig({ enabled: false, issuerUri: '', clientId: '', clientSecret: '', rolesClaim: 'roles', defaultRoles: ['VIEWER'], autoSignup: true, displayNameClaim: 'name' })); }, []); const handleSave = async () => { if (!config) return; setSaving(true); setError(null); try { await adminFetch('/oidc', { method: 'PUT', body: JSON.stringify(config) }); setSuccess(true); setTimeout(() => setSuccess(false), 3000); } catch (e: any) { setError(e.message); } finally { setSaving(false); } }; const handleDelete = async () => { try { await adminFetch('/oidc', { method: 'DELETE' }); setConfig({ enabled: false, issuerUri: '', clientId: '', clientSecret: '', rolesClaim: 'roles', defaultRoles: ['VIEWER'], autoSignup: true, displayNameClaim: 'name' }); } catch (e: any) { setError(e.message); } }; if (!config) return null; return (

OIDC Configuration

setConfig({ ...config, enabled: e.target.checked })} label="Enable OIDC" /> setConfig({ ...config, issuerUri: e.target.value })} /> setConfig({ ...config, clientId: e.target.value })} /> setConfig({ ...config, clientSecret: e.target.value })} /> setConfig({ ...config, rolesClaim: e.target.value })} /> setConfig({ ...config, displayNameClaim: e.target.value })} /> setConfig({ ...config, autoSignup: e.target.checked })} label="Auto Signup" />
{error && {error}} {success && Configuration saved}
); }