import { CheckCheck, KeyRound, ShieldCheck, Undo2 } from "lucide-react"; import type { Metadata } from "next"; import Link from "next/link"; import { AusrollenPanel } from "@/components/ausrollen/AusrollenPanel"; import { Umstellen } from "@/components/deploymentkey/Umstellen"; import { Badge } from "@/components/ui/Badge"; import { Breadcrumb } from "@/components/ui/Breadcrumb"; import { Karte } from "@/components/ui/Karte"; import { MonoKopieren } from "@/components/ui/MonoKopieren"; import { Schrittleiste } from "@/components/ui/Schrittleiste"; import { Seitenkopf } from "@/components/ui/Seitenkopf"; import { VorgangsKnopf } from "@/components/vorgang/VorgangsKnopf"; import { rotationsSchrittAktion } from "@/server/actions/deploymentkey"; import { bestaetigungFrisch, sitzungErforderlich } from "@/server/auth/sitzungspflicht"; import { rotationsStand } from "@/server/services/deploymentkey"; export const metadata: Metadata = { title: "Deployment-Key rotieren" }; const SCHRITTE = ["Erzeugen", "Verteilen", "Prüfen", "Umstellen", "Aufräumen"] as const; /** * Rotation des Instanz-Deployment-Keys (#031). Der neue Key kommt erst neben den alten, * wird geprueft und erst dann zum Standard; der alte verschwindet zuletzt. */ export default async function DeploymentKeySeite() { const { benutzer } = await sitzungErforderlich("deploymentKeyVerwalten", "/deployment-key"); const stand = await rotationsStand(); const fehlgeschlagen = (stand.pruefung ?? []).filter((p) => !p.ok); const aktuell = stand.phase === "bereit" ? 0 : stand.phase === "aufraeumen" ? 4 : !stand.pruefung ? 1 : fehlgeschlagen.length ? 2 : 3; return (
Jeder Schritt verlangt eine frische Bestätigung Ihrer Anmeldung.{" "} Jetzt bestätigen
)}Noch kein Deployment-Key – läuft der Worker?
)} {stand.nachfolger && (Neuer Key (noch nicht Standard)
{stand.abgebrochen.fingerprint}
Alter Key: {stand.vorgaenger.fingerprint}