import React, { useState } from 'react' import { useNavigate } from 'react-router-dom' import { useAuth } from '../contexts/AuthContext' import { Shield } from 'lucide-react' export default function Login() { const { login } = useAuth() const navigate = useNavigate() const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError('') setLoading(true) try { await login(username, password) navigate('/') } catch (err: unknown) { const msg = err instanceof Error ? err.message : 'Login failed' setError((err as { response?: { data?: { error?: string } } })?.response?.data?.error ?? msg) } finally { setLoading(false) } } return (
{/* Logo */}

NixServer

Web Host Manager

{/* Form */}
{error && (
{error}
)}
setUsername(e.target.value)} required autoFocus className="w-full bg-[#0f1117] border border-[#2a2d3e] text-white text-sm rounded-lg px-3 py-2.5 focus:outline-none focus:border-indigo-500 transition-colors" placeholder="root" />
setPassword(e.target.value)} required className="w-full bg-[#0f1117] border border-[#2a2d3e] text-white text-sm rounded-lg px-3 py-2.5 focus:outline-none focus:border-indigo-500 transition-colors" placeholder="••••••••" />

NixServer v0.2.0 · Port 2087

) }