diff --git a/frontend/messages/de.json b/frontend/messages/de.json index ad48e8f7..a54ab59e 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -357,11 +357,13 @@ "admin_system_import_status_done_label": "Dokumente verarbeitet", "admin_system_import_skipped_label": "übersprungen", "import_reason_invalid_pdf_signature": "Keine gültige PDF-Signatur", + "import_reason_path_traversal": "Ungültiger Dateiname (Pfad)", "import_reason_file_read_error": "Fehler beim Lesen der Datei", "import_reason_s3_upload_failed": "Upload-Fehler (S3)", "import_reason_already_exists": "Bereits importiert", "admin_system_import_status_failed": "Import fehlgeschlagen", "admin_system_import_failed_no_spreadsheet": "Keine Tabellendatei gefunden.", + "admin_system_import_failed_artifact": "Eine Importdatei fehlt oder ist ungültig.", "admin_system_import_failed_internal": "Interner Fehler beim Import.", "admin_system_thumbnails_heading": "Thumbnails erzeugen", "admin_system_thumbnails_description": "Erzeugt Vorschaubilder für Dokumente ohne Thumbnail (z. B. nach dem Massenimport).", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index d27dbbd2..5c6ca80a 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -357,11 +357,13 @@ "admin_system_import_status_done_label": "Documents processed", "admin_system_import_skipped_label": "skipped", "import_reason_invalid_pdf_signature": "Invalid PDF signature", + "import_reason_path_traversal": "Invalid filename (path)", "import_reason_file_read_error": "File read error", "import_reason_s3_upload_failed": "Upload error (S3)", "import_reason_already_exists": "Already imported", "admin_system_import_status_failed": "Import failed", "admin_system_import_failed_no_spreadsheet": "No spreadsheet file found.", + "admin_system_import_failed_artifact": "A canonical import file is missing or invalid.", "admin_system_import_failed_internal": "Import failed due to an internal error.", "admin_system_thumbnails_heading": "Generate thumbnails", "admin_system_thumbnails_description": "Generates preview images for documents without a thumbnail (e.g. after the mass import).", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 3e62579a..cbda7fab 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -357,11 +357,13 @@ "admin_system_import_status_done_label": "Documentos procesados", "admin_system_import_skipped_label": "omitidos", "import_reason_invalid_pdf_signature": "Firma PDF no válida", + "import_reason_path_traversal": "Nombre de archivo no válido (ruta)", "import_reason_file_read_error": "Error al leer el archivo", "import_reason_s3_upload_failed": "Error de carga (S3)", "import_reason_already_exists": "Ya importado", "admin_system_import_status_failed": "Importación fallida", "admin_system_import_failed_no_spreadsheet": "No se encontró ninguna hoja de cálculo.", + "admin_system_import_failed_artifact": "Falta un archivo de importación canónico o no es válido.", "admin_system_import_failed_internal": "Error interno durante la importación.", "admin_system_thumbnails_heading": "Generar miniaturas", "admin_system_thumbnails_description": "Genera imágenes de vista previa para documentos sin miniatura (p. ej. tras la importación masiva).", diff --git a/frontend/src/routes/admin/system/ImportStatusCard.svelte b/frontend/src/routes/admin/system/ImportStatusCard.svelte index bb9bce72..e6556857 100644 --- a/frontend/src/routes/admin/system/ImportStatusCard.svelte +++ b/frontend/src/routes/admin/system/ImportStatusCard.svelte @@ -13,10 +13,13 @@ let { const failureMessage = $derived( importStatus?.statusCode === 'IMPORT_FAILED_NO_SPREADSHEET' ? m.admin_system_import_failed_no_spreadsheet() - : m.admin_system_import_failed_internal() + : importStatus?.statusCode === 'IMPORT_FAILED_ARTIFACT' + ? m.admin_system_import_failed_artifact() + : m.admin_system_import_failed_internal() ); function reasonLabel(code: string): string { + if (code === 'INVALID_FILENAME_PATH_TRAVERSAL') return m.import_reason_path_traversal(); if (code === 'INVALID_PDF_SIGNATURE') return m.import_reason_invalid_pdf_signature(); if (code === 'FILE_READ_ERROR') return m.import_reason_file_read_error(); if (code === 'S3_UPLOAD_FAILED') return m.import_reason_s3_upload_failed();