From 327fd624c897f563143082db38ed5998dc91aaea Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 15 Oct 2022 17:33:30 +0200 Subject: [PATCH] Fix Shiro security context problem (hopefully), alerts for import status --- .../libreccm/ui/admin/imexport/ImExportTasks.java | 3 +++ .../admin/imexport/ImportExportTaskManager.java | 8 +++++++- .../libreccm/ui/admin/imexport/ImportTask.java | 10 +++++++++- .../org/libreccm/ui/admin/imexport/imexport.xhtml | 15 ++++++++++++--- .../org/libreccm/ui/AdminBundle.properties | 1 + .../org/libreccm/ui/AdminBundle_de.properties | 1 + 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImExportTasks.java b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImExportTasks.java index f3fad6018..fcef0d00a 100644 --- a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImExportTasks.java +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImExportTasks.java @@ -18,6 +18,8 @@ */ package org.libreccm.ui.admin.imexport; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.util.ThreadContext; import org.libreccm.imexport.Exportable; import org.libreccm.imexport.ImportExport; import org.libreccm.security.Shiro; @@ -62,6 +64,7 @@ public class ImExportTasks { */ @Transactional(Transactional.TxType.REQUIRED) public void importEntitites(@ObservesAsync final ImportTask task) { + ThreadContext.bind(task.getSecurityManager()); shiro.getSystemUser().execute(() -> executeImport(task)); } diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportExportTaskManager.java b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportExportTaskManager.java index 0ef7e0e69..e32b147e7 100644 --- a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportExportTaskManager.java +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportExportTaskManager.java @@ -20,6 +20,7 @@ package org.libreccm.ui.admin.imexport; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.shiro.SecurityUtils; import org.libreccm.imexport.Exportable; import java.time.LocalDate; @@ -154,7 +155,12 @@ public class ImportExportTaskManager { taskStatus.setName(importName); taskStatus.setStarted(LocalDateTime.now()); importTaskSender.fireAsync( - new ImportTask(importName, LocalDate.now(), taskStatus) + new ImportTask( + importName, + LocalDate.now(), + taskStatus, + SecurityUtils.getSecurityManager() + ) ).handle((task, ex) -> handleImportTaskResult(task, ex, taskStatus)); taskStatus.setStatus(ImExportTaskStatus.RUNNING); diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportTask.java b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportTask.java index d3a9d217f..a162c6d9b 100644 --- a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportTask.java +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImportTask.java @@ -41,15 +41,19 @@ public class ImportTask { * The status of the import task. */ private final ImportTaskStatus status; + + private final org.apache.shiro.mgt.SecurityManager securityManager; public ImportTask( final String name, final LocalDate started, - final ImportTaskStatus status + final ImportTaskStatus status, + final org.apache.shiro.mgt.SecurityManager securityManager ) { this.name = name; this.started = started; this.status = status; + this.securityManager = securityManager; } public String getName() { @@ -63,5 +67,9 @@ public class ImportTask { public ImportTaskStatus getStatus() { return status; } + + public org.apache.shiro.mgt.SecurityManager getSecurityManager() { + return securityManager; + } } diff --git a/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/imexport/imexport.xhtml b/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/imexport/imexport.xhtml index 89f97b78c..73a6173a0 100644 --- a/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/imexport/imexport.xhtml +++ b/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/imexport/imexport.xhtml @@ -97,7 +97,7 @@ - +

#{AdminMessages['imexport.activeimports.heading']}

@@ -126,10 +126,19 @@ - #{AdminMessages['imexport.activeimports.table.columns.status.finished']} + + + + - #{AdminMessages['imexport.activeimports.table.columns.status.running']} + diff --git a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties index bd66256dd..10090e9fc 100644 --- a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties +++ b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle.properties @@ -562,3 +562,4 @@ imexport.import.archives.help=Select the archive to import imexport.import.archives.label=Available import archives imexport.import.cancel=Cancel imexport.import.submit=Start Import +imexport.activeimports.table.columns.status.error=Failed diff --git a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties index c8e8a1711..863480f1c 100644 --- a/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties +++ b/ccm-core/src/main/resources/org/libreccm/ui/AdminBundle_de.properties @@ -562,3 +562,4 @@ imexport.import.archives.help=W\u00e4hlen Sie das zu importierende Archiv imexport.import.archives.label=Verf\u00fcgbare Import-Archive imexport.import.cancel=Abbrechen imexport.import.submit=Import starten +imexport.activeimports.table.columns.status.error=Fehlgeschlagen