import { useState } from 'react'; import { useAuth } from '../components/AuthProvider'; export default function LoginPage() { const { login, error: authError } = useAuth(); const [key, setKey] = useState(''); const [submitting, setSubmitting] = useState(false); const [localError, setLocalError] = useState(null); const error = localError || authError; async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!key.trim()) return; setSubmitting(true); setLocalError(null); try { await login(key.trim()); } catch { setLocalError('Invalid API key. Check your key and try again.'); } finally { setSubmitting(false); } } return (

certctl

Certificate Control Plane

setKey(e.target.value)} placeholder="Enter your API key" autoFocus className="w-full bg-white border border-surface-border rounded px-3 py-2.5 text-sm text-ink placeholder-ink-faint focus:outline-none focus:border-brand-400 focus:ring-1 focus:ring-brand-400/20" />
{error && (
{error}
)}

The API key is set via CERTCTL_AUTH_SECRET on the server.

); }