Add contact email confirmation and abuse protection

This commit is contained in:
t.indorf
2026-05-16 11:38:30 +02:00
parent 9542def530
commit 0b80c62beb
12 changed files with 376 additions and 17 deletions
+65
View File
@@ -0,0 +1,65 @@
import type { Metadata } from "next";
import { LogOut, ShieldCheck } from "lucide-react";
import { UserRole } from "@prisma/client";
import { signOut } from "@/auth";
import { requireRole } from "@/lib/auth-utils";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
export const metadata: Metadata = {
title: "Systemadmin · Kita-Planer",
robots: {
index: false,
follow: false,
},
};
export default async function AdminPage() {
const session = await requireRole([UserRole.SUPERADMIN]);
return (
<div className="flex min-h-screen items-center justify-center bg-muted/30 px-4 py-12">
<Card className="w-full max-w-xl">
<CardHeader className="space-y-3">
<div className="flex h-11 w-11 items-center justify-center rounded-md bg-primary text-primary-foreground">
<ShieldCheck className="h-5 w-5" />
</div>
<div>
<CardTitle>Systemadmin-Bereich</CardTitle>
<CardDescription className="mt-2">
Du bist als Superadmin angemeldet. Eine zentrale Systemverwaltung
ist noch nicht umgesetzt, deshalb endet der Login hier statt auf
einer nicht vorhandenen Seite.
</CardDescription>
</div>
</CardHeader>
<CardContent className="space-y-4">
<div className="rounded-md border bg-muted/40 p-4 text-sm text-muted-foreground">
Angemeldet als{" "}
<span className="font-medium text-foreground">
{session.user.email ?? session.user.name ?? "Superadmin"}
</span>
</div>
<form
action={async () => {
"use server";
await signOut({ redirectTo: "/" });
}}
>
<Button type="submit" variant="outline">
<LogOut className="h-4 w-4" />
Abmelden
</Button>
</form>
</CardContent>
</Card>
</div>
);
}