import { KeyRound, Pencil, Plus } from "lucide-react";
import type { Metadata } from "next";
import Link from "next/link";
import { notFound } from "next/navigation";
import type { ReactNode } from "react";
import { PersonArchivieren } from "@/components/personen/PersonFormular";
import { AblaufBadge, KategorieBadge, StatusBadge, TypBadge } from "@/components/schluessel/Anzeige";
import { Badge } from "@/components/ui/Badge";
import { Breadcrumb } from "@/components/ui/Breadcrumb";
import { Button } from "@/components/ui/Button";
import { Karte } from "@/components/ui/Karte";
import { Leerzustand } from "@/components/ui/Leerzustand";
import { Seitenkopf } from "@/components/ui/Seitenkopf";
import { datum } from "@/lib/format";
import { fingerprintKurz } from "@/lib/schluessel";
import { darf } from "@/server/auth/rechte";
import { sitzungErforderlich } from "@/server/auth/sitzungspflicht";
import { personDetail } from "@/server/queries/personen";
export const metadata: Metadata = { title: "Person" };
function Info({ titel, children }: { titel: string; children: ReactNode }) {
return (
{titel}
{children}
);
}
/** Persondetail (#013) mit ihren Schlüsseln. */
export default async function PersonSeite({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params;
const { benutzer } = await sitzungErforderlich("lesen", `/personen/${id}`);
const person = await personDetail(id);
if (!person) notFound();
const archiviert = person.archiviertAm !== null;
const verwalten = darf(benutzer.rolle, "schluesselVerwalten") && !archiviert;
const jetzt = new Date();
return (
}
titel={person.name}
badges={
<>
{archiviert && person.archiviertAm && (
archiviert am {datum(person.archiviertAm)}
)}
{person.organisation &&
{person.organisation} }
{person.benutzer &&
Konto verknüpft }
>
}
aktionen={
verwalten && (
}>
Bearbeiten
)
}
/>
{person.email ?? – }
{person.benutzer ? (
<>
{person.benutzer.name}
{person.benutzer.email && (
{person.benutzer.email}
)}
>
) : (
nicht verknüpft
)}
{datum(person.angelegtAm)}
{person.notiz && (
{person.notiz}
)}
}
>
Public Key hinterlegen
)
}
>
{person.schluessel.length === 0 ? (
}
titel="Noch keine Schlüssel"
text="Die Person kann ihre Public Keys auch selbst unter „Meine Schlüssel“ hinterlegen, sobald ihr Konto verknüpft ist."
/>
) : (
{person.schluessel.map((s) => (
{s.name}
{fingerprintKurz(s.fingerprint)}
{s.selbstHinterlegt && selbst hinterlegt }
{s.verwendungen === 0
? "· noch keinem Host zugewiesen"
: `· ${s.verwendungen} ${s.verwendungen === 1 ? "Verwendung" : "Verwendungen"}`}
))}
)}
{verwalten && (
Archivierte Personen verschwinden aus Listen. Ihre Schlüssel bleiben bestehen und lassen sich
weiterhin widerrufen.
)}
);
}