"use client"; import { Suspense, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; function isInternalUrl(url: string): boolean { if (!url.startsWith("/")) return false; return url.startsWith("/admin/") || url.startsWith("/kunden/"); } function AdminLoginForm() { const router = useRouter(); const searchParams = useSearchParams(); const rawFrom = searchParams.get("from"); const from = rawFrom && isInternalUrl(rawFrom) ? rawFrom : "/admin/analytics"; const sessionExpired = searchParams.get("session_expired") === "true"; const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState( sessionExpired ? "Ihre Session ist abgelaufen. Bitte melden Sie sich erneut an." : "" ); const [loading, setLoading] = useState(false); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(""); setLoading(true); const res = await fetch("/api/admin/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email, password }), }); if (res.ok) { router.push(from); } else { setError("Ungültige Zugangsdaten"); } setLoading(false); } return (

Admin · MBO Tech IT

Bitte anmelden

setEmail(e.target.value)} autoComplete="email" placeholder="admin@mbo-tech-it.de" required className="w-full px-4 py-3 rounded-xl bg-[#111925] border border-gray-700 text-white placeholder-slate-600 focus:outline-none focus:border-orange-500/60 focus:ring-1 focus:ring-orange-500/20 transition-colors" />
setPassword(e.target.value)} autoComplete="current-password" required className="w-full px-4 py-3 rounded-xl bg-[#111925] border border-gray-700 text-white placeholder-slate-600 focus:outline-none focus:border-orange-500/60 focus:ring-1 focus:ring-orange-500/20 transition-colors" />
{error && (

{error}

)}
); } export default function AdminLoginPage() { return ( ); }