diff --git a/AppImage/ProxMenux-1.2.2.3-beta.AppImage b/AppImage/ProxMenux-1.2.2.3-beta.AppImage index 08fb9913..a7c79504 100755 Binary files a/AppImage/ProxMenux-1.2.2.3-beta.AppImage and b/AppImage/ProxMenux-1.2.2.3-beta.AppImage differ diff --git a/AppImage/ProxMenux-Monitor.AppImage.sha256 b/AppImage/ProxMenux-Monitor.AppImage.sha256 index 50036eb4..6ec27afd 100644 --- a/AppImage/ProxMenux-Monitor.AppImage.sha256 +++ b/AppImage/ProxMenux-Monitor.AppImage.sha256 @@ -1 +1 @@ -8db4067d1bcd3d7cd440d4de72d449e8b47480787f3650b35213c83a4bfade40 ProxMenux-1.2.2.3-beta.AppImage +891b6218f11ad99c1159d1cd187648bb104ec9c96e38927ef926307110cf0d4d diff --git a/AppImage/components/host-backup.tsx b/AppImage/components/host-backup.tsx index ddb6b76b..43371bb5 100644 --- a/AppImage/components/host-backup.tsx +++ b/AppImage/components/host-backup.tsx @@ -208,6 +208,63 @@ interface PreflightReport { const fetcher = async (url: string) => fetchApi(url) +// Detect encrypted-backup key errors coming from proxmox-backup-client +// and pull the manifest + provided fingerprints out of the message so +// the UI can render them prominently instead of burying the info +// inside a raw stack-trace-shaped string. Returns null when the error +// is not encryption-related — the caller should fall back to plain +// text rendering in that case. +type KeyfileError = { + manifestFp: string | null + providedFp: string | null + raw: string +} +const parseKeyfileError = (raw: string): KeyfileError | null => { + if (!raw) return null + const lower = raw.toLowerCase() + if (!/missing key|wrong key|was created with key|manifest.?s key|does not match|no key found|unable to (load|read) key|failed to decrypt/.test(lower)) { + return null + } + const manifest = raw.match(/(?:was created with key|manifest'?s key)\s+([0-9a-f:]+)/i) + const provided = raw.match(/provided key\s+([0-9a-f:]+)/i) + return { + manifestFp: manifest?.[1] ?? null, + providedFp: provided?.[1] ?? null, + raw, + } +} + +const KeyfileErrorBlock: React.FC<{ err: KeyfileError; className?: string }> = ({ err, className }) => ( +