import { Badge } from "@/components/ui/Badge"; import { Karte } from "@/components/ui/Karte"; import { Leerzustand } from "@/components/ui/Leerzustand"; import { VorgangsKnopf } from "@/components/vorgang/VorgangsKnopf"; import { datumZeit } from "@/lib/format"; import { abgleichAktion } from "@/server/actions/abgleich"; import type { IstZustand } from "@/server/queries/abgleich"; import { UebernehmenDialog } from "./UebernehmenDialog"; /** Abweichungen und Ist-Zustand eines Hosts (#021, #022). */ const ART_TEXT: Record = { UNBEKANNTER_SCHLUESSEL: "Unbekannter Schlüssel", FEHLENDER_SCHLUESSEL: "Schlüssel fehlt", ZUSAETZLICH_IM_BLOCK: "Block von Hand geändert", DATEI_GEAENDERT: "Block beschädigt", RECHTE: "Rechte", HOSTKEY_GEAENDERT: "Host-Key geändert", PRIVATE_KEY_FEHLT: "Private Key fehlt/verändert", }; const HERKUNFT: Record = { verwaltet: { text: "verwaltet", variante: "ok" }, bekannt: { text: "bekannt", variante: "neutral" }, fremd: { text: "unbekannt", variante: "gefahr" }, }; export function AbgleichKarten({ hostId, zustand, darfAbgleichen, darfUebernehmen, darfVerwalten, }: { hostId: string; zustand: IstZustand; darfAbgleichen: boolean; darfUebernehmen: boolean; darfVerwalten: boolean; }) { return ( <> ) : null } > {zustand.abweichungen.length === 0 ? (

● Keine offenen Abweichungen.

) : (
    {zustand.abweichungen.map((a) => (
  • ● {ART_TEXT[a.art] ?? a.art} {a.zielbenutzer && ( · {a.zielbenutzer} )} {a.text} {a.fingerprint ? `${a.fingerprint} · ` : ""}seit {datumZeit(a.eroeffnetAm)}
  • ))}
)}
{zustand.beobachtungen.length === 0 ? ( ) : (
{zustand.beobachtungen.map((b) => (

{b.zielbenutzer}{" "} · {datumZeit(b.beobachtetAm)}

{b.eintraege.length === 0 ? (

Datei leer.

) : (
    {b.eintraege.map((e) => { const herkunft = HERKUNFT[e.herkunft]!; return (
  • {e.typ} {e.fingerprint}

    {e.kommentar || "(ohne Kommentar)"} {e.optionen ? ` · ${e.optionen}` : ""} {e.imBlock ? " · im verwalteten Block" : ""}

    {herkunft.text} {e.herkunft === "fremd" && darfUebernehmen && ( )}
  • ); })}
)}
))}
)}
); }